shell獲取腳本路徑

以下四種:

$(pwd) ## 獲取當前運行(主函數)腳本的路徑

$(dirname $0) ## 相對路徑

$( cd " $(dirname $0) " && pwd ) ## 當前運行腳本的絕對路徑

$( cd $( dirname " ${BASH_SOURCE[0]} " ) && pwd ) ## 腳本絕對路徑(這段代碼所在腳本的絕對路徑)

對於第三種情況,它存在的意義在於,當該腳本被調用時,顯示的路徑是這段代碼所在腳本的絕對路徑;而腳本被引用時,變量打印的路徑是主函數腳本的路徑。如下有兩個bash腳本,目錄結構如下:

/tmp/
├── main.sh
├── test/
│   ├── a.sh
-
  • 第一種情況,a.sh被main.sh調用, 打印的是a.sh的路徑:
##>> main.sh
bash test/a.sh
##<<

##>>test/a.sh
a_path=$(cd "$(dirname $0)" && pwd)
echo "a.sh a_path=${a_path}"
##<<

bash main.sh

看下打印結果:

$ bash main.sh
a.sh a_path=/tmp/test
  • 第二種情況,a.sh被main.sh引用, 打印的path會是main.sh的路徑:
##>> main.sh
. test/a.sh  ## or "source test/a.sh"
## 將a_path變量引用過來了,做一個打印
echo ${a_path}
##<<

##>>test/a.sh
a_path=$(cd "$(dirname $0)" && pwd)
echo "a.sh a_path=${a_path}"
##<<

bash main.sh

同樣看下打印結果:

$ bash main.sh
a.sh a_path=/tmp
/tmp

這裏很神奇,一開始我以爲a.sh腳本中的echo路徑會是a.sh的路徑,運行結果並不是,而單獨運行a.sh會是如下:

$ bash test/a.sh
a.sh a_path=/tmp/test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章