パイプで標準出力バッファリングをオフにする方法は?

パイプで標準出力バッファリングをオフにする方法は?

2つのコマンドを呼び出すスクリプトがあります。

long_running_command | print_progress

印刷にlong_running_command進展がありましたが、満足できませんでした。私はそれをより良くしようとしましたprint_progress(つまり、進行状況を1行に印刷します)。

質問:stdoutにパイプを接続すると4Kバッファもアクティブになるので、きれいな印刷プログラムは何も得られません...何も...何も...たくさん...:)

4Kバッファを無効にするにはどうすればよいですかlong_running_command? (いいえ、ソースコードはありません。)

ベストアンサー1

この猫の皮をむくもう一つの方法は次のとおりです。stdbufGNU Coreutilsの一部であるプログラムです(FreeBSDにも独自のプログラムがあります)。

stdbuf -i0 -o0 -e0 command

これにより、入力、出力、およびエラーバッファリングが完全にオフになります。一部のアプリケーションでは、パフォーマンス上の理由から、行バッファリングがより適している可能性があります。

stdbuf -oL -eL command

これは、動的にリンクされたアプリケーションのバッファstdioリング(printf()fputs()...)でのみ機能し、そのアプリケーション自体が標準ストリームのバッファリングを調整しない場合にのみ機能します。ただし、これはほとんどのアプリケーションに適用する必要があります。

おすすめ記事