[shell]获取当前脚本的绝对路径
如题,一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无论脚本在什么目录执行,都应该起到相同的效果,但是有些时候,我们设计一个软件包中的工具脚本,可能使用相对路径更加灵活一点,因为你不知道用户会在哪个目录执行你的程序,就有了本文的题目。 常见的一种误区,是使用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环境下的特殊变量,其真实含义是:
这个$0有可能是好几种值,跟调用的方式有关系:
下面对比下正确答案: Jun@VAIO192.168.1.21623:52:54~>
catshell/a.sh
#!/bin/bash
echo'$0:'$0
echo"pwd:"`pwd`
echo"============================="
echo"scriptPath1:"$(cd`dirname$0`;pwd)
echo"scriptPath2:"$(pwd)
echo"scriptPath3:"$(dirname$(readlink-f$0))
echo"scriptPath4:"$(cd$(dirname${BASH_SOURCE:-$0});pwd)
echo-n"scriptPath5:"&&dirname$(readlink-f${BASH_SOURCE[0]})
Jun@VAIO192.168.1.21623:53:17~>
bashshell/a.sh
$0:shell/a.sh
pwd:/home/Jun
=============================
scriptPath1:/home/Jun/shell
scriptPath2:/home/Jun
scriptPath3:/home/Jun/shell
scriptPath4:/home/Jun/shell
scriptPath5:/home/Jun/shell
Jun@VAIO192.168.1.21623:54:54~>
在此解释下scriptPath1:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |