grepがリダイレクトで機能しないのはなぜですか?

grepがリダイレクトで機能しないのはなぜですか?

topリダイレクトでコマンドを使用するとうまく機能します。

top > top.log

grepを使って特定の行をフィルタリングしたいと思います。

top | grep "my_program" > top.log

ただし、ログファイルは空のままです。ただし、grepを使用すると出力が提供されます。

top | grep "my_program"

my_program一部の出力を表示するには、実行中のプログラムに置き換える必要があります。

私の方法がうまくいかないのはなぜですか?どうすれば解決できますか?

ベストアンサー1

私はあなたが説明するのと同じ動作をします。 Ubuntu 11.10から

top | grep "my_program" > top.log

出力を生成しません。

その理由は、grepが出力をバッファリングするためだと思います。 GNU grepに出力を1行ずつ印刷するように指示するには、次の--line-bufferedオプションを使用します。

top | grep --line-buffered "my_program" > top.log

これも見てくださいだから質問は他の潜在的な解決策。

おすすめ記事