如何获取通过“pv”命令传输的命令的错误输出

所以我试图用PV为各种命令(即.tar)创build一个进度条。 我正在ruby脚本中运行这些命令。 问题是,因为pv是pipe道链中的最后一个命令,所以它正在吸收所有的错误。

即。

result = `tar -cpz testDir 2>&1 | pv -pterb > testTar.tar.gz` 

如果下面的命令失败,将不会返回任何错误(即在目录中的空间不足),因为它被pv命令吸收。 有任何想法吗?

对,通常最后的命令是重要的。 您需要pipefail选项。

 $ sh -c ' false | true'; echo $? 0 $ sh -c 'set -o pipefail; false | true'; echo $? 1 

没有简单的方法在纯Posix中复制pipefail ,但我注意到bash和一般真正的posix 破折号(1)确实实现了它。