我这里有一个 bash 脚本:
$GOPATH/
src/
build.sh
在 build.sh 中我有:
export GOPATH="$(cd $(dirname "$BASH_SOURCE") && pwd)"
有没有更短的方法来获取 build.sh 的包含目录?
答案1
要获取脚本所在的目录,请使用以下命令:
readlink -f $(dirname $0)
正如 bash 手册页中所述,$0
设置为文件名。
readlink -f
获取该目录的绝对路径。
答案2
扩展BASH_SOURCE思想,检查是否包含绝对路径;如果是,则直接使用,否则在前面加上 PWD。然后,去掉尾部斜杠及其后面的任何内容,只留下包含的目录:
case ${BASH_SOURCE[0]} in
( /* )
p=${BASH_SOURCE[0]}
;;
( * )
p=${PWD}/${BASH_SOURCE[0]}
;;
esac
p=${p%/*}
printf "%s\n" "$p"