一部のコマンド ライン プログラムには、stdout ストリーム バッファリング動作を変更するオプションがあります。Cソースが利用可能であれば、それが進むべき道です...
# two command options ...
man file | less -p '--no-buffer'
man grep | less -p '--line-buffered'
# ... and their respective source code
# from: http://www.opensource.apple.com/source/file/file-6.2.1/file/src/file.c
if(nobuffer)
(void) fflush(stdout);
# from: http://www.opensource.apple.com/source/grep/grep-28/grep/src/grep.c
if (line_buffered)
fflush (stdout);
expect の unbuffer スクリプトを使用したり、プログラムのソース コードを変更したりする代わりに、 script(1) を使用して、パイプによって引き起こされる stdout の問題を回避することもできます。
参照: stdin がパイプではなく対話型であるとアプリケーションに思わせる
# Linux
script -c "[executable string]" /dev/null
# FreeBSD, Mac OS X
script -q /dev/null "[executable string]"