所以我正在尝试使用 PV 为各种命令(即 tar)创建进度条。我在 ruby 脚本中运行这些命令。问题在于,由于 pv 是管道链中的最后一个命令,它吸收了所有错误。
即。
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 和 generally-true-to-Posix dash(1)确实实现了它。
关于ruby - 如何获取通过 "pv"命令管道传输的命令的错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15532224/