强制shell脚本fflush

时间:2011-02-26 22:40:53

标签: linux bash shell

我想知道是否有可能告诉bash所有对echoprintf的调用应该分别跟进stdout / stderr上的fflush()后续调用?

快速而肮脏的解决方案是编写我自己的printf实现,并使用它来代替内置的,但我想到了我可能不需要。

我正在编写几个同时运行的构建脚本,因为调试需要我真的需要查看他们按顺序编写的消息。

3 个答案:

答案 0 :(得分:10)

如果命令使用stdio并连接到终端,则每行都会刷新它们。 否则,您需要在管道中使用stdbuf之类的命令 http://www.pixelbeat.org/programming/stdio_buffering/

tl; dr:而非printf ...尝试放入脚本stdbuf -o0 printf ..stdbuf -oL printf ...

答案 1 :(得分:1)

也许" stty raw"可以帮助其他一些技巧来处理行尾处理。 AFAIK" raw"模式关闭基于行的缓冲,至少在用于串行端口时(" stty raw< / dev / ttyS0")。

答案 2 :(得分:1)

如果强制读取文件,则似乎会导致缓冲区刷新。这些对我有用。

将数据读入无用的变量:

    x=$(<$logfile)

或者做一个UUOC:

    cat $logfile > /dev/null