如何获取通过"pv"命令管道传输的命令的错误输出



所以我试图使用PV来创建各种命令的进度条(即。焦油)。我在一个ruby脚本中运行这些命令。问题是pv是管道链中的最后一个命令,它吸收了所有的错误。

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

下面的命令将不会返回任何错误,如果它失败(即。pv命令占用了目录空间,导致目录空间不足。什么好主意吗?

正确,通常最后一个命令计数。您需要管道失败选项。

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

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

最新更新