强制一个shell脚本fflush

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

一个快速和肮脏的解决scheme将是写我自己的printf实现这样做,并用它来代替内置的,但它发生在我身上,我可能不需要。

我正在写几个一次运行的构build脚本,为了debugging需要,我真的需要看到他们按顺序编写的消息。

Solutions Collecting From Web of "强制一个shell脚本fflush"

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

tl; dr:而不是printf ...尝试把脚本stdbuf -o0 printf ..stdbuf -oL printf ...

如果您强制读取文件,似乎会导致缓冲区刷新。 这些为我工作。

将数据读入一个无用的变量:

  x=$(<$logfile) 

或者做一个UUOC:

  cat $logfile > /dev/null 

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