时间:2010-07-26 03:27:54

标签: bash logging exec unbuffered-output

6 个答案:

答案 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端子输出命令设置无缓冲的终端。