所以我正在尝试使用 PV 为各种命令(即 tar)创建进度条。我在 ruby 脚本中运行这些命令。问题在于,由于 pv 是管道链中的最后一个命令,它正在吸收所有错误。
IE。
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 dash(1)确实实现了它。