我正在编写一个类似以下内容的脚本:
echo -n "Doing stuff, wait for it... "
do_stuff
(($?==0)) && echo SUCCESS || echo FAILURE
原谅糟糕的bash技巧。无论如何,问题是该行的第一部分在do_stuff
完成之前不会被打印 - 而对我来说,用户知道我接下来要运行的是很重要的。它对我来说也很重要,因为我迂腐,不打印新行。因此,文本在缓冲区中并且不会被刷新。
This question非常相似,但是对于那些事情基本完成的方式,OP很满意。我不是。如果推动推动我甚至愿意使用与curses相关的东西(但记住这毕竟是一个shell脚本)。
答案 0 :(得分:3)
我认为适当的做法是关闭缓冲:
stdbuf -i0 -o0 -e0 <command>
i = stdin
o = stdout
e = stderr