答案 0 :(得分:28)
GNU coreutils-8.5还有stdbuf
命令来修改I / O流缓冲:
http://www.pixelbeat.org/programming/stdio_buffering/
因此,在您的示例中,只需调用:
stdbuf -oL /usr/bin/some_binary > /tmp/my.log 2>&1
这将允许文本逐行显示(一旦完成一行,C中的行尾为"\n"
字符)。如果您真的想立即输出,请改用-o0
。
如果您不想通过unbuffer
命令将依赖项引入expect
,则可能更希望这种方式。另一方面,如果你必须欺骗unbuffer
认为它面临真正的标准输出,那么some_binary
方式是必需的。
答案 1 :(得分:13)
答案 2 :(得分:11)
答案 3 :(得分:3)
我搜索了互联网以获得答案,但uniq
除了stdbuf
之外的任何东西都过于顽固而无法缓冲所有内容:
{piped_command_here} | stdbuf -oL uniq | {more_piped_command_here}
答案 4 :(得分:2)
GNU Coreutils-8包含一个名为stdbuf的程序,它基本上执行LD_PRELOAD技巧。它适用于Linux,据报道适用于BSD系统。
答案 5 :(得分:2)
环境变量可以将终端IO模式设置为无缓冲。
导出NSUnbufferedIO = YES
这将为C和Ojective-C端子输出命令设置无缓冲的终端。