检索脚本的父目录

时间:2013-11-25 14:50:41

标签: bash shell unix

我正在使用卸载程序脚本来删除安装脚本的父文件夹。

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

所以uninstall.sh必须这样做:

rm- rf /usr/local/Myapplication

我可以检索卸载所在的文件夹

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

但是我仍然不确定获得父路径的漂亮方式。 我想过使用sed去除这条路径的“Uninstaller”部分,但是有一种优雅的方法来获取Myapplication文件夹的路径来删除它吗?

谢谢

7 个答案:

答案 0 :(得分:12)

两次使用dirname怎么样?

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

引用desaster只是为了防止路径中的空白。否则它会更令人愉悦:

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

答案 1 :(得分:4)

只需获取父目录的父目录:

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

答案 2 :(得分:4)

获取父目录路径的最终简单方法:

PARENT_DIRECTORY="${PWD%/*}" 

答案 3 :(得分:3)

如果您需要绝对路径,则需要cd。否则你可以使用$(dirname $0)/..

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

答案 4 :(得分:2)

脚本父目录的完整路径,即“/ 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 )

答案 5 :(得分:1)

为什么不在路径的末尾添加../?

答案 6 :(得分:1)

我放了这个answer as comment at 2018。但是,由于我对解决方案的有效性有很好的反馈,因此我也会在这里分享它:

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