2017-02-12 67 views
1

如何在bash/shell腳本中用雙重砰擊開始一行以便最後一次輸入再次運行?用bash腳本開始一行! (double bang)

我想將最後一個運行程序的過去輸出轉換爲一個新程序。例如,如果我最後跑了ls -l,現在我運行這個腳本,我想將ls -l轉換爲<some program here>進行操作。

#! /bin/sh 
!! | <some program here> 

我越來越

!!:不 發現

+0

據我所知,邦邦再次執行最後執行的命令(在交互模式下)。這可能不是正確的方法 - 想象一下刪除文件然後運行命令,你會得到不同的輸出,因爲你試圖再次刪除已經刪除的文件。將ls的輸出配置到你的程序中可能看起來像這樣:'ls -l | 。/ yourscript.sh'。請注意,您的腳本需要可執行。 – redxef

+0

歷史擴展需要可用(它不在'/ bin/sh'中)並且被啓用(它在非交互式shell中不是默認的)。 – chepner

+0

謝謝你們。假設我想在運行第一個命令後運行myscript.sh。有沒有辦法從歷史記錄中訪問該行,並在myscript.sh中再次運行它? – userJoe

回答

0

如果你真的想在腳本再次執行該命令可以訪問~/.bash_history文件,以獲得歷史(如果您有多個終端窗口打開,這可能會有問題)。

如果你只是想採取一個命令,它管包含程序的shell腳本的輸出,那麼你的命令是這樣的:

<yourcommand> | ./yourscript.sh

和你的腳本看起來是這樣的:

#!/bin/sh 
sed 's/a/b/g' <&0 

在腳本的<&0部分管道的stdin到sed命令。