所以我尝试使用PV为各种命令(即tar)创建进度条。我在ruby脚本中运行这些命令。问题是,由于pv是管道链中的最后一个命令,它正在吸收所有错误。
即
result = `tar -cpz testDir 2>&1 | pv -pterb > testTar.tar.gz`
如果命令失败(即目录中的空间不足),则下面的命令不会返回任何错误,因为它被pv命令吸收。有什么想法吗?
答案 0 :(得分:1)
对,通常最后一个命令计数。您需要 pipefail 选项。
$ sh -c ' false | true'; echo $?
0
$ sh -c 'set -o pipefail; false | true'; echo $?
1
没有简单的方法可以在纯Posix中复制pipefail
,但我注意到bash和普遍真实的Posix dash(1)确实实现了它。