2012-03-13 20 views
0

我知道歷史將捕獲我運行的命令,但它是特定於shell的。我使用多個shell和多個主機,並希望編寫一個小腳本,在我運行的每個命令之後,將該命令與主機名一起轉儲到某個文件。這樣,我可以實現自己的歷史命令,從該文件中讀取,並可以將主機作爲參數,這對我來說很方便。我不知道如何獲得第一部分雖然..也就是說,獲取我輸入的每個shell命令以觸發「將命令轉儲到文件中」部分。有任何想法嗎?我可以使用什麼來捕獲我在bash中運行的每個命令(a-la history)

由於

+0

我不知道是否有可能,但也許你可以使用** inotify **和** inotify-tools **,並監視帶有可執行文件的目錄,並在其中一個文件執行時寫入一個日誌文件。 – l1zard 2012-03-13 16:09:08

回答

0

在bash,所述PROMPT_COMMAND環境變量包含在顯示PS1提示之前將要執行的命令。所以你可能會像history | tail -n1 | perl -npe 's/^\s+\d+\s+//' | yourcommand HOST

+0

我遵循這個想法,但我不斷收到歷史文件行號,我不知道爲什麼..我有類似的東西: PROMPT_COMMAND ='history | tail -n1 | perl -npe's/^ \ s + \ d + \ s + //'' export PROMPT_COMMAND 如果我手動運行該命令,我不會收到行號,但是當它通過PROMPT_COMMAND完成後,它確實發生了..ie: host_69:/ home/palace/history $ history | tail -n1 | perl -npe's/^ \ s + \ d + \ s + //' history | tail -n1 | perl -npe's/^ \ s + \ d + \ s + //' 1106 history | tail -n1 | perl -npe's/^ \ s + \ d + \ s + //' – 2012-03-13 16:21:12

+0

實際上,請改用'fc'命令。它需要選項才能打印行號。爲了得到最近的命令,你可以執行'$(fc -lnr | head -n1)',儘管你會在行的開始處得到一堆空白。 – mkb 2012-03-13 16:53:10

0

script實用程序應該解決您的問題。它將您輸入的所有內容以及打印在終端上的所有內容都記錄在一個文件中(甚至包括終端控制代碼,因此如果您在控制檯上顯示該文件,您甚至可以複製原始文本顏色)。

相關問題