我正在看着这个命令运行
tar cf - 20180412 -P | pv -s $(du -sb 20180412 | awk '{print $1}') | gzip > 20180412.tar.gz
9.02GiB 0:01:20 [ 114MiB/s] [===================================================================================================================================================================>] 100%
Run Code Online (Sandbox Code Playgroud)
并想知道如何pv
工作。我认为管道是急切的,但我认为这pv
只有在管道懒惰的情况下才能正常工作。
那么,bash 管道是懒惰还是渴望?
管道行为与此命令的目的无关。
虽然tar
可以先启动,但它通常从时间零开始喂入管道,所以它很快就会阻塞在管道上并等待pv
开始消耗。反过来,pv
甚至不会在$( )
start 和 finish内的命令之前启动。
实际上,pv
是尽快启动还是等待第一个字节出现在管道上并不重要(顺便说一下,答案是:尽快)。
您可能会错过的是du
估计输入目录(而不是 tarfile)并同时tar
自行读取相同的输入目录。