上部をgrepにパイプすると、出力リダイレクトは機能しません。

上部をgrepにパイプすると、出力リダイレクトは機能しません。

Linuxでこのコマンドを実行すると、次のようになります。

$ top -b -d 20 | grep "load average" -A 20 > top.log

top.log は常に空です。

しかし、このコマンドを実行すると:

$ top -b -d 20 | grep "load average" -A 20 | tee top.log

その後、top.logに内容があります。

これを使用したくない場合tee(出力がコンソールに表示されたくないため)、top.logが更新されるように最初のコマンドを変更するにはどうすればよいですか?

マイコンピュータはCentOS Linux 7(コア)を使用しています。

ベストアンサー1

--line-bufferedこのオプションを使用する必要がありますgrep(あなたの質問に「centos」タグが付けられているので、私は間違いなくGNU grepを使用しています)。

デフォルトではgrep、ラインバッファリングは出力が端末のものである場合にのみ使用されます(stdio関数と同様にprintf、putsなど)。この--line-bufferedオプションはこれをオーバーライドします。 GNU coreutilsには、stdioを使用するすべての動的リンカーで動作するstdbuf(1)ラッパーもあります。

おすすめ記事