2013-03-20 73 views
2

因此,我试图使用PV为各种命令(即.tar)创建进度条。我正在ruby脚本中运行这些命令。问题是,因为pv是管道链中的最后一个命令,所以它正在吸收所有的错误。如何获取通过“pv”命令传递的命令的错误输出

即。

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

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

回答

1

对,通常是最后的命令。您需要pipefail选项。

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

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

+0

非常感谢。这解决了我的问题。 – Robin 2013-03-21 22:35:06