Shell获取当前正在执⾏脚本的绝对路径
1. pwd命令
我们看看使⽤pwd命令能否获取当前正在执⾏脚本的绝对路径。该命令的作⽤是“print name of current/working directory”,真实含义是当前⼯作⽬录,并不是正在执⾏脚本的⽬录。
xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo `pwd`
xiaosi@Qunar:~/company/sh$ sh pwd.sh
/home/xiaosi/company/sh
xiaosi@Qunar:~/company/sh$ cd ..
xiaosi@Qunar:~/company$ sh sh/pwd.sh
/home/xiaosi/company
pwd.sh脚本中只有⼀句:echo `pwd`。通过在不同路径下运⾏脚本,sh pwd.sh得到/home/xiaosi/company/sh,然⽽sh
sh/pwd.sh 得到/home/xiaosi/company,所以说pwd命令并不能得到正在执⾏脚本的⽬录。
2. $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值与调⽤的⽅式有关:
(1)使⽤⼀个⽂件调⽤bash,那$0的值是⽂件的名字
xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo $0
xiaosi@Qunar:~/company/sh$ sh pwd.sh
shell脚本返回执行结果pwd.sh
(2)使⽤-c选项启动bash,真正执⾏的命令会从⼀个字符串中读取,字符串后⾯如果还有别的参数的话,使⽤从$0开始的特殊变量引⽤(跟路径⽆关了)
(3)除此以外,$0会被设置成调⽤bash的那个⽂件的名字(没说是绝对路径)
3. 正解
basepath=$(cd `dirname $0`; pwd)
dirname $0,取得当前执⾏的脚本⽂件的⽗⽬录
cd `dirname $0`,进⼊这个⽬录(切换当前⼯作⽬录)
pwd,显⽰当前⼯作⽬录(cd执⾏后的)
到此这篇关于Shell获取当前正在执⾏脚本的绝对路径的⽂章就介绍到这了,更多相关Shell获取脚本绝对路径内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论