在 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
作为标准输出。
我正在编写一个脚本,它执行如下操作:
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
作为标准输出。