Ruby: return 非零退出状态
Ruby: return nonzero exit status
我希望我的 Ruby 脚本在特定条件下 return 任何非零退出状态。退出状态本身并不重要,只要它不为零即可。我测试了它是如何完成的:
test_exit.rb:
exit 4
test_exit_wrap.rb:
system("ruby test_exit.rb")
puts $?.exitstatus
命令:
> ruby test_exit_wrap.rb
4
这太棒了,因为这正是我想要的。然后我尝试在我的项目中复制它。
pullrequest.rb:
results = [install_result.class, clicks_result.class, event_result.class, tuples_result.class, match_result.class]
if results.include? NilClass
puts "result included nil"
exit 4
end
rakefile.rb:
command = "irb #{@script} #{@app_id} #{start_date} #{end_date} #{start_time} #{end_time} #{@timezone} #{@database}"
system("#{command}")
puts $?.exitstatus
if $?.exitstatus != 0
puts "!!!!!!!!!!!!!!!!!!!!!! FAILED JOB !!!!!!!!!!!!!!!!!!!!!!!!!!"
@backjob_queue << fail
end
命令:
pullkochava.rb(main):032:1>
result included nil
=> nil
pullrequest.rb(main):032:0>
0
(当然,将这些剪掉,希望它仍然有意义;@script 等于 pullrequest.rb,我已经仔细检查过)我们可以看到 if results.include? block肯定执行了,但是exit 4好像丢了。 0 来自 puts $?.exitstatus,除了 0,我永远无法将它设置为 return。我尝试过引发错误、不同的退出代码和中止。 Abort 执行 return 非零退出代码;但是它也会中止耙子。它会将 FAILED JOB 放入,但 rakefile 不会将 @backjob_queue 保存到我的数据库中。
我错过了什么吗?我怎样才能 return 一个不会中止抽成的非零退出状态?
我马上意识到我的错误,但如果其他人需要这个答案:
您的系统命令应该是 "ruby blahblahblah.rb" 而不是 "irb blahblahblah.rb"。两者都将 运行 编码,但 irb 将 return 退出状态 0,除非您中止。
我希望我的 Ruby 脚本在特定条件下 return 任何非零退出状态。退出状态本身并不重要,只要它不为零即可。我测试了它是如何完成的:
test_exit.rb:
exit 4
test_exit_wrap.rb:
system("ruby test_exit.rb")
puts $?.exitstatus
命令:
> ruby test_exit_wrap.rb
4
这太棒了,因为这正是我想要的。然后我尝试在我的项目中复制它。
pullrequest.rb:
results = [install_result.class, clicks_result.class, event_result.class, tuples_result.class, match_result.class]
if results.include? NilClass
puts "result included nil"
exit 4
end
rakefile.rb:
command = "irb #{@script} #{@app_id} #{start_date} #{end_date} #{start_time} #{end_time} #{@timezone} #{@database}"
system("#{command}")
puts $?.exitstatus
if $?.exitstatus != 0
puts "!!!!!!!!!!!!!!!!!!!!!! FAILED JOB !!!!!!!!!!!!!!!!!!!!!!!!!!"
@backjob_queue << fail
end
命令:
pullkochava.rb(main):032:1>
result included nil
=> nil
pullrequest.rb(main):032:0>
0
(当然,将这些剪掉,希望它仍然有意义;@script 等于 pullrequest.rb,我已经仔细检查过)我们可以看到 if results.include? block肯定执行了,但是exit 4好像丢了。 0 来自 puts $?.exitstatus,除了 0,我永远无法将它设置为 return。我尝试过引发错误、不同的退出代码和中止。 Abort 执行 return 非零退出代码;但是它也会中止耙子。它会将 FAILED JOB 放入,但 rakefile 不会将 @backjob_queue 保存到我的数据库中。
我错过了什么吗?我怎样才能 return 一个不会中止抽成的非零退出状态?
我马上意识到我的错误,但如果其他人需要这个答案:
您的系统命令应该是 "ruby blahblahblah.rb" 而不是 "irb blahblahblah.rb"。两者都将 运行 编码,但 irb 将 return 退出状态 0,除非您中止。