2012-09-10 65 views
1

可能重複的文件系統中的位置:
In the bash script how do I know the script file name?Retrive其中一個bash腳本保存

我經常需要一個bash腳本引用其他所需資源的文件系統。通常在shebang行之後使用以下代碼。它設置了一個名爲「scriptPos」變量包含腳本

scriptPos=${0%/*} 

它正常工作的電流通路,但有一些更直觀地更換外殼的擴張?

+0

它包含一個類似我的方式的解決方案。問題是我每次都忘記語法,只能將它從腳本複製並粘貼到腳本中:-D – OkieOth

回答

0

一種選擇是

scriptPos=$(dirname $0) 

其需要支付額外過程的成本,但更多的自我描述。如果腳本是在當前直接,輸出不同(好了,在我看來):

#!/bin/bash 
scriptPos=$(dirname $0) 

echo '$0:' $0 
echo 'dirname:' $scriptPos 
echo 'expansion:' ${0%/*} 

$ bash tmp.bash 
$0: tmp.bash 
dirname: . 
expansion: tmp.bash 

UPDATE:解決缺陷的企圖jm666指出。

#!/bin/bash 
scriptPos=$(v=$(readlink "$0") && echo $(dirname "$v") || echo $(dirname "$0")) 
+0

好的就是這樣:-) – OkieOth

+1

這不會工作1)與符號鏈接腳本。 (將顯示符號鏈接的dirname)。 2)相對路徑將顯示「../../dir」,而不是腳本在文件系統中的位置。 – jm666

1

dirname,但它需要一個fork

scriptPos=$(dirname "$0") 
+0

我不知道叉子 – OkieOth

+0

...並不一定更直觀。 – tripleee

+0

@ user1651840:在腳本中用'dirname'嘗試'strace -e execve -f'。 @tripleee:好吧,我似乎記得這一個,而我總是檢查參數擴展。 – Thor