2012-01-25 11 views
4

をリダイレクトします。bashの、ネストされたコマンドと、私は、このようなコマンドを使用して、プロセスのCPU使用状況を追跡しようとしています

top -b -d 1 | grep myprocess.exe 

次に、私は例えば、ログファイルにこれをリダイレクトしたいと思います今

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

それは私はgrepをmyprocess.exeを考えているので、これは実際には動作しません> Output.logです代わりにmyprocess.exe

の私は、このリダイレクトが仕事を得ることができますどのように誰もが知っていますか?

+0

なぜリダイレクトのための 'grep'pingだと思いますか?リダイレクトは 'bash'によって解釈され、プロセス名にはなりません – Kevin

+0

' top -b -d 1 | grep postgres> output.log'は私のマシン(Ubuntu 10.04 LTS)で動作します。 –

+0

おそらくそれは当てはまりますが、2番目のコマンドを実行すると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

そう、私のために働いていないようです。前と同じ結果が得られます(たとえば、output.logは空です)。 – user788171

+0

申し訳ありませんが、2番目の例は基本的にOPの2番目の例と同じです。 1番目の例が解決策でなければなりません。 –

2

を、それは私がmyprocess.exe > output.log代わりのmyprocess.exe

をgrepをしています考えているので、これは実際には動作しません。

Wロング。すべてがうまくいくはずです。最初の例は、端末にstdoutを設定してパイプラインを実行します(したがって、出力は表示されますが、ファイルには何も書き込まれません)。 2番目の例では、stdoutoutput.logに設定してパイプラインを実行します(したがって、出力は表示されませんが、ファイル内に表示されます)。

出力を両方に書きたい場合は、前のパイプラインのstdoutstdinとして取得し、それを複製する別のプロセスが必要です。同様に:

previous_pipeline | tee output.log 

teestdinにそれを取得何をstdoutに出力します(そうstdoutのために、すべてが前と同じである)が、さらに(CMDLINEの引数として与えられた)別のファイルを開いて、そこにコピーを書きます。

関連する問題