ruby - 如何获取通过 "pv"命令管道传输的命令的错误输出

标签 ruby linux

所以我正在尝试使用 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/

相关文章:

mysql - rails 电子邮件发送代码明天需要 days + 2,这是为什么?

c++ - 需要帮助调试互斥锁死锁

java - 在我的树莓派中安装 rxtx 包

ruby-on-rails - 有没有办法提供更好的 rspec 测试描述

ruby - 为什么在 Ruby 中使用 String#count 比使用 String#chars 计算字母更快?

c++ - Ruby 和指针与其他语言相比?

ruby - 如何使用 ruby​​ 对 postgres 中的 hstore 列执行复杂更新?

linux - 输入设备的udev规则

linux - 使用 SED 实用程序输出不带替换的匹配模式

php - Linux 上 Azure 应用服务上的 Wordpress 上的 "cURL error 28: Resolving timed out"