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

时间:2013-03-20 18:50:00

标签: ruby linux

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

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

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

1 个答案:

答案 0 :(得分:1)

对,通常最后一个命令计数。您需要 pipefail 选项。

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

没有简单的方法可以在纯Posix中复制pipefail,但我注意到bash和普遍真实的Posix dash(1)确实实现了它。