首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ruby系统命令检查退出代码

ruby系统命令检查退出代码
EN

Stack Overflow用户
提问于 2013-09-11 04:22:07
回答 5查看 96.5K关注 0票数 118

我在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
EN

回答 5

Stack Overflow用户

发布于 2016-07-31 19:17:15

对我来说,我更喜欢使用来调用外壳命令并检查$?获取进程状态。$?是一个进程状态对象,可以从这个对象中获取命令的进程信息,包括:状态码、执行状态、pid等。

$的一些有用的方法?对象:

   $?.exitstatus => return error code    
   $?.success? => return true if error code is 0, otherwise false
   $?.pid => created process pid
票数 44
EN

Stack Overflow用户

发布于 2013-09-11 04:26:44

如果命令具有非零退出代码,则system返回false;如果没有命令,则返回nil

因此

system( "foo" ) or exit

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

应该是有效的,并且相当简洁。

票数 31
EN

Stack Overflow用户

发布于 2013-09-11 04:27:00

您没有捕获system调用的结果,这是返回结果代码的地方:

exit_code = system("ruby test.rb")

请记住,每次system调用或等效调用(包括回号方法)都会产生一个新的shell,因此不可能捕获以前shell环境的结果。在本例中,如果一切正常,则exit_codetrue,否则为nil

popen3命令提供了更多低级详细信息。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18728069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档