Ruby系统命令怎么检查退出代码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

我在ruby中有一堆系统调用,例如下面的命令,我想同时检查它们的退出代码,这样如果命令失败,我的脚本就退出。

system("VBoxManage createvm --name test1")
system("ruby test.rb")

我想要像

system("VBoxManage createvm --name test1", 0)<--其中第二个参数检查退出代码并确认系统调用成功,如果不成功,它将引发错误或做类似的事情。

这有可能吗?

我试过一些类似的东西,但也没用。

system("ruby test.rb")
system("echo $?")

`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
  raise 'Exit code is not zero'
end
提问于
用户回答回答于

文档

true如果命令给出零退出状态,则返回false非零退出状态。nil如果命令执行失败则返回。

system("unknown command")     #=> nil
system("echo foo")            #=> true
system("echo foo | grep bar") #=> false

此外

错误状态可用于$?

system("VBoxManage createvm --invalid-option")

$?             #=> #<Process::Status: pid 9926 exit 2>
$?.exitstatus  #=> 2
用户回答回答于

system返回false,如果命令具有非零退出代码,或者nil如果没有命令的话。

因此

system( "foo" ) or exit

或者 system( "foo" ) or raise "Something went wrong with foo"

都可以

扫码关注云+社区