Shell 获取当前脚本文件路径
目录
以下代码适用于 bash 和 zsh:
# 此脚本文件的绝对路径
SCRIPT_FILE=$(readlink -f $0)
# 此脚本文件所在文件夹的绝对路径
SCRIPT_DIR=$(dirname $SCRIPT_FILE)
# 注意:这两行要分开写,不要合并成一句,否则变量内容为空。
但嵌套子进程的时候,zsh
对路径的处理时正常的,可是 bash
会出问题。
如下代码可以兼容多种情况:
# bash 中有效
name=$(basename $0)
if \[ $name == "your-script-filename.sh" \]( $name == "your-script-filename.sh" ); then
SCRIPT_DIR=$(dirname $(realpath $0))
elif \[ $0 == *bash \]( $0 == *bash ); then
# 在子进程中被调用时。注意通过 source 方式引用脚本时,此方法依然无效
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
fi
unset name