2012-01-25 116 views
4

我試圖使用這樣的命令來跟蹤的處理的CPU使用率:bash中,嵌套命令和重定向

top -b -d 1 | grep myprocess.exe 

接着,我想此重定向到一個日誌文件,例如

top -b -d 1 | grep myprocess.exe > output.log 

現在,這實際上並沒有工作,因爲它認爲我grepping myprocess.exe的myprocess.exe

> output.log 而不是是否有人知道我能得到這個重定向工作?

+0

你爲什麼認爲這是'grep'ping重定向?重定向由'bash'解釋,並且不會導致進程名稱 – Kevin

+0

'top -b -d 1 | grep postgres> output.log'在我的機器上運行(Ubuntu 10.04 LTS)。 –

+0

也許這是真的,但它仍然不能解釋爲什麼在運行第二個命令時output.log爲空。 – user788171

回答

1

嘗試tee

top -b -d 1 | grep myprocess.exe | tee output.log 

如果你想讓它顯示無輸出:

top -b -d 1 | grep myprocess.exe | tee output.log > /dev/null 
+0

它們與OP的命令有什麼不同? –

+0

因此,T恤似乎不適合我。我得到和以前一樣的結果(例如output.log爲空)。 – user788171

+0

對不起,但第二個例子與OP的第二個例子基本相同。第一個例子應該是解決方案。 –

2

現在,這實際上並沒有工作,因爲它認爲我grepping myprocess.exe > output.log代替myprocess.exe

W榮。一切都應該沒問題。第一個示例執行管道stdout設置到您的終端(因此您會看到輸出,但沒有寫入文件)。第二個示例執行stdout設置爲output.log的流水線(因此您不會看到輸出,但它會在您的文件中正確顯示)。

如果您希望將輸出寫入兩者,則需要另一個流程,將上一個流水線的stdout設置爲stdin,然後將其複製。像:

previous_pipeline | tee output.log 

tee將在標準輸出上打印的內容沾到stdin(所以對於stdout,一切都和以前一樣),但還打開另一個文件(列爲CMDLINE ARG)和寫一份給它。