Bash 管道是惰性的还是急切的?

Bash 管道是惰性的还是急切的?

我正在看着这个命令运行

tar cf - 20180412 -P | pv -s $(du -sb 20180412 | awk '{print $1}') | gzip > 20180412.tar.gz
9.02GiB 0:01:20 [ 114MiB/s] [===================================================================================================================================================================>] 100%

并想知道它是如何pv工作的。我以为管道是急切的,但我认为pv只有管道是惰性的,它才能正常工作。

那么,bash 管道是懒惰的还是急切的?

答案1

管道行为对于此命令的目的来说根本不重要。

虽然tar它可以先启动,但它通常从零时间开始为管道提供数据,因此它很快就会阻塞在管道上并等待pv开始使用。反过来,它甚至在启动和完成pv命令之前都不会启动。$( )

实际上,尽快启动还是等待第一个字节出现在管道上并不重要pv(顺便说一下,答案是:尽快)。

您可能会错过的是du估计输入目录(而不是 tarfile)并同时tar自行读取相同的输入目录。

相关内容