在 bash 中,如何强制刷新打印到终端的不完整行

ein*_*ica 9 bash terminal newline flush fflush

我正在编写一个脚本,它执行如下操作:

echo -n "Doing stuff, wait for it... "
do_stuff
(($?==0)) && echo SUCCESS || echo FAILURE
Run Code Online (Sandbox Code Playgroud)

请原谅糟糕的 bash 技能。无论如何,问题是该行的第一部分在do_stuff完成之前不会被打印 - 虽然对我来说用户知道我接下来要运行什么很重要。对我来说也很重要,因为我很迂腐,不打印换行符。因此,文本位于缓冲区中并且不会被刷新。

这个问题非常相似,但是OP对事情基本上是满意的。我不是。如果到了紧要关头,我什至愿意使用与诅咒相关的东西(但请记住,这毕竟是一个 shell 脚本)。

Jua*_*rez 9

我认为适当的做法是关闭缓冲:

stdbuf -i0 -o0 -e0 <command>


i = stdin
o = stdout
e = stderr
Run Code Online (Sandbox Code Playgroud)

在您的具体情况下,您只需要-o0标准输出。