1. Linux中的 cd "$(dirname "$0")" 是什么意思?
$0 表示当前运行的命令名,一般用于shell 脚本中
dirname 用于取指定路径所在的目录 ,如 dirname /home/test.sh 结果为 /home
cd 为切换文件夹
$(命令) 返回该命令的结果
所以结合以上分析,结果为:切换到 脚本 所在的目录。
2. $(cd `dirname $0`;pwd)
在命令行状态下单纯执行 $(cd `dirname $0`) 是毫无意义的。因为他返回当前路径的"."。
这个命令写在脚本文件里才有作用,它返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
在/home/admin/test/下新建test.sh内容如下
cd `dirname $0`
echo `pwd`
然后返回到/home/admin/执行
sh test/test.sh
运行结果:
/home/admin/test
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。
3.执行/var/lib/Michael/test.sh
[root@test Michael]# cat test.sh
DIR="$( cd "$( dirname"${BASH_SOURCE[0]}")" && pwd )"
cd ${DIR}
echo ${DIR}
[root@test Michael]# bash test.sh
/var/lib/Michael
DIR为文件的目录: /var/lib/Michael/test.sh
那么,一般写法有:
DIR=$( cd "$( dirname"${BASH_SOURCE[0]}")"&& pwd )
cd ${DIR}
DIR=$( cd "$( dirname"${BASH_SOURCE}")" ; pwd -P)
cd ${DIR}
备注:-P-physical(无效)显示实际物理路径,而非使用连接(link)路径
DIR=$( cd $( dirname"$0"); pwd)
cd ${DIR}
备注:$0 shell本身的文件名
如何获取当前执行脚本?
如果是bash test.sh或者./test.sh的运行方式,那么很简单,直接使用$0就可以了。
那么如果是source test.sh或者. ./test.sh的方式运行呢?$0就变成了”-bash”了。
这个时候就需要使用$BASH_SOURCE了。(bash版本>=3.0)
BASH_SOURCE[0]等价于BASH_SOURCE, 取得当前执行的shell文件所在的路径及文件名。