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 脚本)。
我认为适当的做法是关闭缓冲:
stdbuf -i0 -o0 -e0 <command>
i = stdin
o = stdout
e = stderr
Run Code Online (Sandbox Code Playgroud)
在您的具体情况下,您只需要-o0标准输出。