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