2012-05-01 39 views
1

我要像(shell是bash)執行語句獲取「源」 ed腳本

/# source /workspace/scripts/script.sh 
/workspace/scripts# source script.sh 

我想獲得它自己的位置script.sh內的位置。 (script.sh不會在PATH變量中)

我可以在運行腳本時使用readlink -f $0來做到這一點,但是當我運行source它時,我也可以使用readlink -f $0

I 不要想要解決方案取決於我在哪裏運行source命令。 (否則pwd就足夠了)

這可能嗎?

回答

4

無法在所有情況下100%可靠地找到位置。
如果您使用bash您最好的選擇是$BASH_SOURCE變量。
This link對此主題非常有幫助。

+0

BASH_SOURCE做了詭計。謝謝。 (使用http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in?page=1&tab=active#tab-top)代碼 – Schu

0

由於script.sh在你的路徑中,你應該能夠使用which得到它的完整路徑。因此,在腳本中,如果$0不是完整路徑,則可以執行which $0

carabiner$ cat ~/bin/test.sh 
#!/bin/sh 

echo test - $0 $1 
which $0 

carabiner$ source test.sh 
test - test.sh 
test.sh is /home/zigdon/bin/test.sh 
+0

當你源腳本$ 0沒有指向該文件了,它指向運行「source script.sh」的shell。 – Schu

+0

我認爲這也是真實的,但至少在'zsh'中,它確實指向源腳本。 – zigdon

+0

看起來像bash中的行爲不一樣 – Schu