我想知道是否有可能告诉bash所有对echo
或printf
的调用应该分别跟进stdout / stderr上的fflush()
后续调用?
快速而肮脏的解决方案是编写我自己的printf实现,并使用它来代替内置的,但我想到了我可能不需要。
我正在编写几个同时运行的构建脚本,因为调试需要我真的需要查看他们按顺序编写的消息。
答案 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