我正在看着这个命令运行
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
自行读取相同的输入目录。