Bash脚本获得当前脚本路径方法
典型错误
流传dirname $0
可以获得当前脚本所在目录,实际上是错误的。
在用户的bin目录下新建测试脚本mytest.sh
:
- snippet.bash
[yz@bogon ~]$ pwd /home/yz [yz@bogon ~]$ cd bin/ [yz@bogon bin]$ pwd /home/yz/bin [yz@bogon bin]$ vim mytest.sh
注意:/home/yz/bin
已经加入了$PATH
环境变量。
mytest.sh
内容如下:
- snippet.bash
mydir=$(cd "$(dirname "$0")"; pwd) echo "dir: $mydir"
我们执行以下命令:
- snippet.bash
[yz@bogon ~]$ cd / [yz@bogon /]$ bash mytest.sh dir: /
显然,输出结果不符合预期。
正确方法
修改mytext.sh
:
- snippet.bash
mydir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd) #mydir=$(cd "$(dirname "$0")"; pwd) echo "dir: $mydir"
执行结果符合预期:
- snippet.bash
[yz@bogon ~]$ cd / [yz@bogon /]$ bash mytest.sh dir: /home/yz/bin
打赏作者以资鼓励: