2013-02-12 50 views
6

所以我想製作一個可移植的bashrc/bash_profile文件。我有一個腳本,我象徵性地鏈接到.bashrc,.bash_profile等。然後,我正在查看$0並根據哪個腳本被調用來切換我的操作。問題是shell調用bashrc腳本,當然它會執行bash,這對我來說意味着$0-bash$1更多未設置爲腳本名稱。如何獲得在bash中執行的腳本名稱?

所以我的問題是,在bash中如何獲得正在執行的腳本的名稱。不是執行它的二進制文件,例如慶典?

我認爲它給我-bash$1沒有被設置,因爲它實際上不是一個新的過程。有任何想法嗎?

回答

2

變量BASH_ARGV應該工作,它出現在腳本being sourced

$BASH_ARGV 
+0

意思是這不是通用的。當解析$ ARGV時,你必須知道你被其他腳本調用了。也許我錯了。如果我錯了,你應該加強對你答案的解釋,例如添加一個例子 – hek2mgl 2013-02-12 15:02:28

24

嘗試:

readlink -f ${BASH_SOURCE[0]}

或者只是:

${BASH_SOURCE[0]}

備註: 「script.sh」

$0,只有當用戶執行 「./script.sh」

$BASH_ARGV只有當用戶執行工程或 「來源script.sh」

工作

${BASH_SOURCE[0]}適用於這兩種情況。

readlink -f在使用符號鏈接時很有用。

+0

這應該是公認的答案,因爲它提供了更多的細節,並解釋了不同的場景更清晰。 – piratemurray 2015-07-20 19:31:42