2013-05-28 17 views
0

我一直在研究一個小腳本,該腳本打開gedit或我在Linux機器中編輯的任何編輯器來編輯包含文件夾中的另一個腳本在PATH變量中。使用「which」查找Bash中第一個參數的路徑不起作用

我使用which來查找腳本的路徑,以便我可以給出編輯器的路徑並開始編輯該腳本。腳本的名字顯然是腳本的第一個參數。

問題是當which作爲另一個腳本的第一個參數給出時找不到腳本,但是如果直接使用它,它會找到該路徑。

下面是一個例子,使其更清晰。

which script.sh 
prints "/home/bla/bla/script_folder/script.sh 

,但如果我用在一個腳本像這樣:

echo "ScriptPath: $(which 1)" 
echo "ScriptName: $1" 

這會不會對一些奇怪的原因,工作。我知道在參數1中使用的腳本的位置在我的PATH變量中可用。 Echo將不會打印任何東西,當我給它$(which 1),假設$1是我正在尋找的腳本的名稱。我不知道這是爲什麼。然後,我決定將腳本的名稱放在一個變量中,然後用它來查找新變量包含的內容(在我的情況下是腳本的名稱),但它也不起作用。

例:

scriptName="$1" 
echo "$(which scriptName)" 
This won't work either. 
Such a simple thing, and I cannot make it work for some weird reason. Any ideas why this is not working? 
+8

您似乎在美元符號內放置'$()' - 您需要$($「$」)和$($「$ scriptName」)'。只有在*算術*評估中,您可以放棄sigil:'x = 5; echo $((x + 1))' –

回答

0

我敢肯定你有錯與$(其中1),你需要把你想反引號裏面運行命令 :`這$ 1`

echo "Script Path: `which $1`" 
echo "Script Name: $1" 
+0

你完全正確,因爲我沒有捕捉到:S。謝謝你們 –

1

由於@glenn傑克曼說:你需要使用$引用變量,甚至裏面$()。因此,命令echo "ScriptPath: $(which 1)"尋找命名爲「1」的命令。你想要的是echo "ScriptPath: $(which "$1")"(請注意,在雙引號中包含像$1這樣的變量引用幾乎總是一個好主意)。同樣的:

scriptName="$1" 
echo "$(which scriptName)" # doesn't work, looks for a command named "scriptName" 
echo "$(which "$scriptName")" # works as expected 
+0

謝謝你,我習慣於使用$(這是cmd),我完全沒有理解。一定很累,謝謝 –

相關問題