检索脚本的父目录

Man*_*O_O 7 unix bash shell

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

/usr/local/Myapplication/Uninstaller/uninstall.sh
Run Code Online (Sandbox Code Playgroud)

所以uninstall.sh必须这样做:

rm- rf /usr/local/Myapplication
Run Code Online (Sandbox Code Playgroud)

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

SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bol*_*wyn 13

怎么样使用dirname两次?

APP_ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")"
Run Code Online (Sandbox Code Playgroud)

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

APP_ROOT=$(dirname $(dirname $(readlink -fm $0)))
Run Code Online (Sandbox Code Playgroud)


mih*_*dis 5

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

my_app_path=$(dirname $(dirname $(readlink -f "$0")))
Run Code Online (Sandbox Code Playgroud)


Abd*_*UMI 5

我把这个答案作为评论放在2018年。但由于我得到了关于该解决方案有效性的良好反馈,我也将在这里分享:

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