2013-10-21 56 views
1

通過$0變量獲取在bash中運行腳本的路徑是微不足道的。但是,如果您通過另一個腳本進行點擊,則不起作用,您將獲得調用腳本的路徑。考慮例如:檢索到虛線腳本的路徑

#!/bin/bash 
# script1.sh 
echo $(readlink -f $0) 

...

#!/bin/bash 
# script2.sh 
. /tmp/script1.sh 
echo $(readlink -f $0) 

從上述腳本的輸出是:

/tmp/script2.sh 
/tmp/script2.sh 

然而,如果在$0虛線的腳本發出的路徑該腳本,輸出將改爲:

/tmp/script1.sh 
/tmp/script2.sh 

我怎樣才能得到正確的價值?

+0

僅供參考 - ''echo「$(readlink -f」$ 0「)」'將是更正確的表述。並且'$ 0'總是*懷疑;參見[BashFAQ#28](http://mywiki.wooledge.org/BashFAQ/028),包括最後一節(「爲什麼$ 0不是一個選項」)。 –

回答

2

爲了克服這個問題(具體以bash)的,您可以使用${BASH_SOURCE[0]}

#!/bin/bash 
# script1.sh 
real_dollar_zero=${BASH_SOURCE[0]} 
echo $(readlink -f $real_dollar_zero) 

現在輸出的是:

/tmp/script1.sh 
/tmp/script2.sh 

中提琴! - The strung musical instrument often confused with a violin!

+1

我認爲你的意思是*瞧*(或更正確*voilà*),這是法語爲「看到這裏」。 – tripleee

+1

我認爲你是對的。我其實並不是指樂器!速度更快,速度更快。 :-)爲了幽默的緣故,我會把它留在那裏。 – Craig

+1

作爲法國人,'viola'意思是說...所以我希望/認爲/假設@tripleee是正確的:) –