1. Linux中的 cd "$(dirname "$0")"? 是什么意思?
$0 表示當(dāng)前運(yùn)行的命令名洋腮,一般用于shell 腳本中
dirname 用于取指定路徑所在的目錄 ,如 dirname /home/test.sh??結(jié)果為 /home
cd 為切換文件夾
$(命令) 返回該命令的結(jié)果
所以結(jié)合以上分析调窍,結(jié)果為:切換到 腳本 所在的目錄。
2.?$(cd `dirname $0`;pwd)
在命令行狀態(tài)下單純執(zhí)行 $(cd `dirname $0`) 是毫無意義的乏悄。因?yàn)樗祷禺?dāng)前路徑的"."氮凝。
這個命令寫在腳本文件里才有作用,它返回這個腳本文件放置的目錄萝映,并可以根據(jù)這個目錄來定位所要運(yùn)行程序的相對位置(絕對位置除外)吴叶。
在/home/admin/test/下新建test.sh內(nèi)容如下
cd `dirname $0`
echo `pwd`
然后返回到/home/admin/執(zhí)行
sh test/test.sh
運(yùn)行結(jié)果:
/home/admin/test
這樣就可以知道一些和腳本一起部署的文件的位置了,只要知道相對位置就可以根據(jù)這個目錄來定位序臂,而可以不用關(guān)心絕對位置蚌卤。這樣腳本的可移植性就提高了,扔到任何一臺服務(wù)器奥秆,(如果是部署腳本)都可以執(zhí)行逊彭。
3.執(zhí)行/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(無效)顯示實(shí)際物理路徑构订,而非使用連接(link)路徑
DIR=$( cd ?$( dirname"$0"); ?pwd)
cd ${DIR}
備注:$0 shell本身的文件名
如何獲取當(dāng)前執(zhí)行腳本侮叮?
如果是bash?test.sh或者./test.sh的運(yùn)行方式,那么很簡單悼瘾,直接使用$0就可以了囊榜。
那么如果是source test.sh或者. ./test.sh的方式運(yùn)行呢?$0就變成了”-bash”了亥宿。
這個時候就需要使用$BASH_SOURCE了卸勺。(bash版本>=3.0)
BASH_SOURCE[0]等價于BASH_SOURCE, 取得當(dāng)前執(zhí)行的shell文件所在的路徑及文件名烫扼。