回答:
それらはまったく異なる方法で動作します。
プログラムunbufferは、expectedを使用して、指定されたコマンドを実行します。expectは子プロセスのstdoutにアタッチする擬似ttyを作成するため、子はブロックバッファリングの代わりにラインバッファリングを使用するべきだと考えることにだまされる可能性があります。一部のプログラムはisatty(stdout)がtrueの場合に動作を変更しますが、他のプログラムはそうではなく、どちらがそうでどちらがそうでないかを知るのは非常に困難です。
プログラムstdbufは、動的にロードされたバイナリのlibcの前にlibstdbufを配置しようとします。libstdbufは、libc stdio呼び出しのデフォルトのバッファリング戦略を再定義します。
私はこれを見つけました
apt-get source expect coreutils
各プログラムの関連ソースを読む。
unbuffer -p
入力をバッファリング解除するプロセスが終了すると、正しく動作しないように見える場合があります。考慮:process1 | unbuffer -p process2 | process3
process1が終了した場合、process2はまだ終了していない可能性があります。unbufferが長く待つことを知ることは不可能です