示例代碼
我們可以在bash中使用以下命令獲取所執行腳本的絕對路徑:
#!/bin/bash
DIR=$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd);
echo $DIR
代碼解釋
BASH_SOURCE[0] - 等價於 BASH_SOURCE ,取得當前執行的 shell 文件所在的路徑及文件名
dirname - 去除文件名中的非目錄部分,僅顯示與目錄有關的部分
$() - 相當於 `command`, 即獲取command命令的結果
&& - 邏輯運算符號,只有當&&左邊運行成功時才會運行&&右邊的命令
總結
該命令獲取腳本源文件的文件路徑名,獲取其目錄部分,然后 cd 到該目錄,使用 pwd 獲取當前目錄的完整路徑,然后將這個路徑的值賦給變量 DIR。
例如 /tmp/test/test.sh 內容如下:
#!/bin/bash
echo "${BASH_SOURCE[0]}"
echo "${BASH_SOURCE}"
echo "$(dirname "${BASH_SOURCE[0]}")"
echo "$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
若在當前目錄 /tmp 下執行 bash ./test/test.sh ,輸出為:
lestat@Lestats-MBP:/tmp$ bash ./test/test.sh
test/test.sh
test/test.sh
test
/tmp/test