簡體   English   中英

檢索腳本的父目錄

[英]Retrieve parent directory of script

我正在處理卸載程序腳本以刪除安裝腳本的父文件夾。

/usr/local/Myapplication/Uninstaller/uninstall.sh

所以uninstall.sh必須這樣做:

rm- rf /usr/local/Myapplication

我可以檢索卸載所在的文件夾

SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")

但我仍然不確定獲得父路徑的漂亮方法。 我想使用 sed 來卸載此路徑的“卸載程序”部分,但是有沒有一種優雅的方法來獲取 Myapplication 文件夾的路徑以將其刪除?

謝謝

兩次使用dirname怎么樣?

APP_ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")"

引用 desaster 只需要防止路徑中的空格。 否則會更順眼:

APP_ROOT=$(dirname $(dirname $(readlink -fm $0)))

只需獲取父目錄的父目錄:

my_app_path=$(dirname $(dirname $(readlink -f "$0")))

獲取父目錄路徑的終極簡單方法:

PARENT_DIRECTORY="${PWD%/*}" 

如果您需要絕對路徑,則需要cd 否則你可以只使用$(dirname $0)/..

cd $(dirname $0)/..
path=$(pwd)
cd - # go back

腳本父目錄的完整路徑,即“/usr/local/bin/bla”: export PARENT_OF_THIS_SCRIPT=$( cd $(dirname $0) ; pwd -P )

只是腳本的最新父級,即“bla”: export PARENT_DIR_OF_SCRIPT=$( cd $(dirname $0) ; pwd -P | xargs basename )

我將此 答案作為評論放在 2018 但是由於我得到了關於解決方案有效性的很好的反饋,我也將在這里分享:

# dir of script 
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
# parent dir of that dir
PARENT_DIRECTORY="${DIR%/*}"

為什么不簡單地在路徑末尾添加 ../ ?

由於$0可能有BASH_SOURCE[0]行為,這里是一個使用BASH_SOURCE[0]的解決方案:

#/bin/bash

PARENT_DIR=$(dirname $(dirname $(readlink -f "${BASH_SOURCE[0]}")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM