本的grep它顯示了一個COMAND我用:如何直接使用輸出作爲命令
echo `history | grep "ssh root" | head -1| cut -c6-`
與此輸出:
ssh [email protected]
我所要的輸出直接執行的命令,而不是的印刷。 我該怎麼辦?
本的grep它顯示了一個COMAND我用:如何直接使用輸出作爲命令
echo `history | grep "ssh root" | head -1| cut -c6-`
與此輸出:
ssh [email protected]
我所要的輸出直接執行的命令,而不是的印刷。 我該怎麼辦?
理想情況下,您會使用$(cmd)
語法而不是`cmd`
語法。這樣可以更容易地嵌套子殼以及跟蹤正在發生的事情。
這且不說,如果去掉echo語句就會運行該腳本:
# Prints out ls
echo $(echo ls)
# Runs the ls command
$(echo ls)
原則上,這可以通過使用$()
格式來完成,所以
$(history | grep "ssh root" | head -1| cut -c6-)
應該做些什麼你要求。但是,我認爲這樣做不可取,因爲這會自動執行從grep
得到的命令,所以如果你犯了一個錯誤,會發生很多不好的事情。相反,我建議在重新執行之前檢查你的結果。 bash
歷史上有很多不錯的捷徑來處理這些事情。作爲一個例子,假設:
> history | grep "ssh root"
756 ssh [email protected]
您可以輕鬆地通過鍵入
!756
這絕對要安全得多呼籲行756此命令。希望這可以幫助。
使用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的退出狀態。如果沒有參數或只有空參數,返回狀態爲零。
刪除回聲? – 123
將它管到'sh'或'bash'? – amphetamachine
@ 123留下'echo'不起作用。 –