以下Ruby方法有什么区别?
exec,system和%x()或反引号
我知道它们用于通过Ruby以编程方式执行终端命令,但我想知道为什么有三种不同的方法来执行此操作.
只要您想在命令行上执行某些操作,就可以使用以下语法:
%x(command to run)
Run Code Online (Sandbox Code Playgroud)
但是,我想捕获错误或至少得到响应,以便我可以正确解析它.我尝试过设置:
result = %x(command to run)
Run Code Online (Sandbox Code Playgroud)
并使用try-catch
begin
%x(command to run)
rescue
"didn't work"
end
Run Code Online (Sandbox Code Playgroud)
无济于事.如何捕获结果而不是打印出来?
我正在用Ruby编写一些脚本,我需要通过shell命令与一些非Ruby代码进行交互.我知道从Ruby执行shell命令至少有6种不同的方法,遗憾的是,当shell命令失败时,这些方法似乎都没有停止执行.
基本上,我正在寻找相当于以下内容的东西:
set -o errexit
Run Code Online (Sandbox Code Playgroud)
...在Bash脚本中.理想情况下,解决方案会在命令失败时(即通过检查非零返回值)引发异常,可能使用stderr作为消息.这不会太难写,但似乎这应该存在.我有没有找到一个选项?
这是关于ruby系统命令检查退出代码的后续问题.我想运行命令,以获取其输出以及退出代码.目前我在代码中使用的是:
rv = `#{cmd} 2>&1`
Run Code Online (Sandbox Code Playgroud)
但这只能捕获输出,并且
rv = system(cmd)
Run Code Online (Sandbox Code Playgroud)
仅捕获退出代码.如何实现两者?