从ruby脚本运行shell命令并在shell命令错误时失败的优雅方式

时间:2014-05-13 15:53:12

标签: ruby shell error-handling

我知道这样的事情是可能的

out = `echo 1`
$?.to_i == 0 or raise “Failed"

然而,我无法合并这两个语句,因此如果shell命令返回错误,输出将被捕获到变量中并且命令将失败(也打印捕获的输出)。

如果可能,最好为1行。像

这样的东西
out = `echo 1` && $?.to_i == 0 or raise “Failed. Output:” + out

只是更漂亮。

1 个答案:

答案 0 :(得分:0)

查看Open3课程。它有许多方法可以让你做你想做的事。

特别是,capture2最接近您正在做的事情。来自文档:

  

:: capture2捕获命令的标准输出。

stdout_str, status = Open3.capture2([env,] cmd... [, opts])

注意可选的env参数。如果没有这个,您的被叫应用程序将没有环境信息,因此您可能需要考虑传递ENV哈希,允许子项具有与正在运行的代码相同的环境设置。如果要限制传递的内容,可以有选择地将键/值对添加到哈希值,或使用ENV.dup然后使用delete个选定的键/值对。