2つのコマンドを呼び出すスクリプトがあります。
long_running_command | print_progress
印刷にlong_running_command
進展がありましたが、満足できませんでした。私はそれをより良くしようとしましたprint_progress
(つまり、進行状況を1行に印刷します)。
質問:stdoutにパイプを接続すると4Kバッファもアクティブになるので、きれいな印刷プログラムは何も得られません...何も...何も...たくさん...:)
4K
バッファを無効にするにはどうすればよいですかlong_running_command
? (いいえ、ソースコードはありません。)
ベストアンサー1
この猫の皮をむくもう一つの方法は次のとおりです。stdbuf
GNU Coreutilsの一部であるプログラムです(FreeBSDにも独自のプログラムがあります)。
stdbuf -i0 -o0 -e0 command
これにより、入力、出力、およびエラーバッファリングが完全にオフになります。一部のアプリケーションでは、パフォーマンス上の理由から、行バッファリングがより適している可能性があります。
stdbuf -oL -eL command
これは、動的にリンクされたアプリケーションのバッファstdio
リング(printf()
、fputs()
...)でのみ機能し、そのアプリケーション自体が標準ストリームのバッファリングを調整しない場合にのみ機能します。ただし、これはほとんどのアプリケーションに適用する必要があります。