相关疑难解决方法(0)

关闭管道中的缓冲

我有一个调用两个命令的脚本:

long_running_command | print_progress
Run Code Online (Sandbox Code Playgroud)

long_running_command打印的进展,但我很不满意它。我正在使用print_progress使其更好(即,我在一行中打印进度)。

问题:将管道连接到标准输出也会激活一个 4K 缓冲区,所以漂亮的打印程序什么都没有……什么都没有……什么都没有……很多……:)

如何禁用4K缓冲区long_running_command(不,我没有源)?

shell pipe buffer

475
推荐指数
9
解决办法
26万
查看次数

如果通过 cat 管道传输,grep 直到 EOF 才会输出

鉴于这个最小的例子

( 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)

grep bash pipe

20
推荐指数
3
解决办法
3290
查看次数

标签 统计

pipe ×2

bash ×1

buffer ×1

grep ×1

shell ×1