2010-11-12 47 views
2

我試圖通過從文本文件中讀取命令來運行命令,但失敗了。當我輸入完全相同的行時,它很難。即時通訊驚訝,它甚至嘗試執行移動命令,但得到了一個錯誤消息,轉換爲「文件或目錄未找到」。顯然,這裏的錯誤消息並沒有說出真相。有人可以解釋嗎?錯誤地使用反引號執行?

[email protected]:~/spr/man/de$ head -n7 mkdoc|tail -n1 
mv nutzer.1.gz ~/public_html/man/man1/ 
[email protected]:~/spr/man/de$ `head -n7 mkdoc|tail -n1` 
mv: Verschieben von „nutzer.1.gz「 nach „~/public_html/man/man1/「 nicht möglich: Datei oder Verzeichnis nicht gefunden 
[email protected]:~/spr/man/de$ ls 
gzip mkdoc nutzer.1 nutzer.1.gz nutzer.pod rbsh 
[email protected]:~/spr/man/de$ mv nutzer.1.gz ~/public_html/man/man1/ 
[email protected]:~/spr/man/de$ 

我是這樣做的學校,所以答案會很好。我們得到結果的方式並不重要,儘管我所嘗試的方式似乎沒有任何安全性。

回答

2

`head -n7 mkdoc|tail -n1`由命令的輸出,這是mv nutzer.1.gz ~/public_html/man/man1/取代。這個輸出然後被解釋爲一個命令,一個mv命令。

但是,它失敗了,因爲代字符擴展已經執行。在這一點上,~未被您的主目錄替代;它只是一個簡單的代字符。這是因爲如果你曾試圖執行

'mv' 'nutzer.1.gz' '~/public_html/man/man1/' 

對於您不能使用$HOME同樣的原因,或第二套反引號或任何其他動態結構。要做到這一點,你需要使用eval,或將字符串傳遞給第二個shell。

eval `head -n7 mkdoc|tail -n1` 
bash -c "`head -n7 mkdoc|tail -n1`" 
1

波形符號「〜」不在反引號內插入。

[編輯] 相反,你應該能夠使用:EVAL 「$(頭-n7 mkdoc |尾-N1)」

+0

,所以我可以用$ HOME,而不是我把它 – vecvan 2010-11-12 02:57:03

+0

沒有,但你可以使用eval: – 2010-11-12 02:58:14

+0

EVAL 「頭-n7 mkdoc |尾-n1」 #應該工作 – 2010-11-12 02:58:52