2

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

IE。

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

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

4

1 回答 1

1

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

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

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

于 2013-03-20T18:56:49.103 回答