2017-05-19 59 views

回答

1

理想情況下,您會使用$(cmd)語法而不是`cmd`語法。這樣可以更容易地嵌套子殼以及跟蹤正在發生的事情。

這且不說,如果去掉echo語句就會運行該腳本:

# Prints out ls 
echo $(echo ls) 

# Runs the ls command 
$(echo ls) 
2

原則上,這可以通過使用$()格式來完成,所以

$(history | grep "ssh root" | head -1| cut -c6-) 

應該做些什麼你要求。但是,我認爲這樣做不可取,因爲這會自動執行從grep得到的命令,所以如果你犯了一個錯誤,會發生很多不好的事情。相反,我建議在重新執行之前檢查你的結果。 bash歷史上有很多不錯的捷徑來處理這些事情。作爲一個例子,假設:

> history | grep "ssh root" 
    756 ssh [email protected] 

您可以輕鬆地通過鍵入

!756 

這絕對要安全得多呼籲行756此命令。希望這可以幫助。

0

使用eval。

$ eval `history | grep "ssh root" | head -1| cut -c6-` 

eval command in Bash and its typical uses

eval需要一個字符串作爲它的參數,並評估它,就好像你鍵入的命令行上的字符串。

而擊手冊(https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins

EVAL

eval [arguments] 

的參數被連接在一起成一個單一的命令,然後將其讀出並執行,和它的退出狀態返回eval的退出狀態。如果沒有參數或只有空參數,返回狀態爲零。

相關問題