我有一个调用两个命令的脚本:
long_running_command | print_progress
Run Code Online (Sandbox Code Playgroud)
在long_running_command打印的进展,但我很不满意它。我正在使用print_progress使其更好(即,我在一行中打印进度)。
问题:将管道连接到标准输出也会激活一个 4K 缓冲区,所以漂亮的打印程序什么都没有……什么都没有……什么都没有……很多……:)
如何禁用4K缓冲区long_running_command(不,我没有源)?
鉴于这个最小的例子
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
Run Code Online (Sandbox Code Playgroud)
它输出LINE 1,然后,一秒钟后LINE 2,如预期的那样输出。
如果我们通过管道将其传输到 grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,行为与前一种情况相同。
如果,或者,我们通过管道将其传输到 cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
Run Code Online (Sandbox Code Playgroud)
行为再次与预期相同。
但是,如果我们通过管道连接到grep LINE,然后到cat,
( echo "LINE 1" ; sleep 1 ; echo …Run Code Online (Sandbox Code Playgroud)