我知道这样的事情是可能的
out = `echo 1`
$?.to_i == 0 or raise “Failed"
然而,我无法合并这两个语句,因此如果shell命令返回错误,输出将被捕获到变量中并且命令将失败(也打印捕获的输出)。
如果可能,最好为1行。像
这样的东西out = `echo 1` && $?.to_i == 0 or raise “Failed. Output:” + out
只是更漂亮。
答案 0 :(得分:0)
查看Open3课程。它有许多方法可以让你做你想做的事。
特别是,capture2
最接近您正在做的事情。来自文档:
:: capture2捕获命令的标准输出。
stdout_str, status = Open3.capture2([env,] cmd... [, opts])
注意可选的env
参数。如果没有这个,您的被叫应用程序将没有环境信息,因此您可能需要考虑传递ENV
哈希,允许子项具有与正在运行的代码相同的环境设置。如果要限制传递的内容,可以有选择地将键/值对添加到哈希值,或使用ENV.dup
然后使用delete
个选定的键/值对。