我在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
发布于 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
发布于 2013-09-11 04:26:44
如果命令具有非零退出代码,则system
返回false
;如果没有命令,则返回nil
。
因此
system( "foo" ) or exit
或
system( "foo" ) or raise "Something went wrong with foo"
应该是有效的,并且相当简洁。
发布于 2013-09-11 04:27:00
您没有捕获system
调用的结果,这是返回结果代码的地方:
exit_code = system("ruby test.rb")
请记住,每次system
调用或等效调用(包括回号方法)都会产生一个新的shell,因此不可能捕获以前shell环境的结果。在本例中,如果一切正常,则exit_code
为true
,否则为nil
。
popen3
命令提供了更多低级详细信息。
https://stackoverflow.com/questions/18728069
复制相似问题