流传dirname $0
可以获得当前脚本所在目录,实际上是错误的。
在用户的bin目录下新建测试脚本mytest.sh
:
[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
内容如下:
mydir=$(cd "$(dirname "$0")"; pwd) echo "dir: $mydir"
我们执行以下命令:
[yz@bogon ~]$ cd / [yz@bogon /]$ bash mytest.sh dir: /
显然,输出结果不符合预期。
修改mytext.sh
:
mydir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd) #mydir=$(cd "$(dirname "$0")"; pwd) echo "dir: $mydir"
执行结果符合预期:
[yz@bogon ~]$ cd / [yz@bogon /]$ bash mytest.sh dir: /home/yz/bin