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)ラッパーもあります。