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

In bash, How can I force a flush of an incomplete line printed to the terminal

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

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

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

This question 很像,不过OP那边很满意,嗯,基本上就是这样。我不是。如果迫在眉睫,我什至愿意使用与诅咒相关的东西(但请记住,毕竟这是一个 shell 脚本)。

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

stdbuf -i0 -o0 -e0 <command>


i = stdin
o = stdout
e = stderr

在您的特定情况下,您只需要 -o0 作为标准输出。