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

时间:2016-04-25 18:03:42

标签: bash terminal newline flush fflush

我正在编写一个类似以下内容的脚本:

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

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

This question非常相似,但是对于那些事情基本完成的方式,OP很满意。我不是。如果推动推动我甚至愿意使用与curses相关的东西(但记住这毕竟是一个shell脚本)。

1 个答案:

答案 0 :(得分:3)

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

stdbuf -i0 -o0 -e0 <command>


i = stdin
o = stdout
e = stderr