常见的一种误区,是使用pwd命令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存放的目录。所以,这是不对的。你可以试试bash shell/a.sh,a.sh 内容是 pwd,你会发现,显示的是执行命令的路径/home/june,并不是 a.sh 所在路径:/home/june/shell/a.sh
另一个误人子弟的答案,是$0,这个也是不对的,这个$0是Bash环境下的特殊变量,其真实含义是:
Expands to the name of the shell or shell script. This is set at shell initialization. If bash is invoked with a file of commands,$0 is set to the name of that file. If bash is started with the -c option,then $0 is set to the first argument after the string to be executed,if one is present. Otherwise,it is set to the file name used to invoke bash,as given by argument zero.
这个$0有可能是好几种值,跟调用的方式有关系:
- 使用-c选项启动bash的话,真正执行的命令会从一个字符串中读取,字符串后面如果还有别的参数的话,使用从$0开始的特殊变量引用(跟路径无关了)
- 除此以外,$0会被设置成调用bash的那个文件的名字(没说是绝对路径)
下面对比下正确答案:
basepath=$(cd `dirname $0`; pwd)
在此解释下basepath:
由此,我们获得了当前正在执行的脚本的存放路径。