在Linux Shell脚本中得到当前脚本所在路径
正确的做法是
1 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
${BASH_SOURCE[0]}
是当前脚本
$( dirname "${BASH_SOURCE[0]}" )
是当前目录(脚本的目录)
$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
是切换到脚本所在目录,然后通过pwd查询目录路径,因为切换语句放在了括号里,所以这句执行后得到了路径但实际对于外层脚本来说路径没有切换。
搜索时经常看到有人说
1 | DIR=$(cd $(dirname $0);pwd) |
这种写法是有问题的,它不能被用于通过source调用的脚本
比如我们需要通过一个.sh设置环境变量,这个环境变量的值需要用到.sh所在路径,那我们就需要通过source去调用脚本。