The Issue of the Day Before

取得程式本身的絕對路徑

shell -
(cd `dirname $0`; pwd -P)

Why

執行 shell script 時,經常需要知道 script 自己所在的位置。 因為需要切換接下來的工作目錄,以便後續的程式知道應該去正確的位置執行或取得資訊。

How

利用 dirname 能夠取得路徑中不含字串尾部 / 的最後一個 / 之前的路徑。 但如果路徑字串不含 / 則傳回 .

例如

> dirname abc/123/xyz
//  abc/123

> dirname abc/123/xyz/
//  abc/123

> dirname abc
//  .

shell script 中,變數 $0 代表自己本身。

/bin/test.sh
> echo $0
// /bin/test.sh

結合 dirname$0 就能得到 shell script 所在的目錄路徑。

但有時結果會是一個相對路徑或軟連結。但利用 pwd -P 可以得到目前工作目錄的絕對路徑。 所以只要將目前工作路徑切換到 shell script 所在的目錄路徑,然後在使用 pwd -P,便能得到 shell script 所在的目錄絕對路徑。

cwd=(cd `dirname $0`; pwd -P)

使用 () 將兩個指令合併成一個,他會當成一個新的 shell script 來執行並傳回最後一個指令的結果。

這可以得到結果,同時並不會切換工作目錄。

閱讀在雲端