以下四種:
$(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