[英]Access Ruby exit code in END {}
Ruby具有BEGIN {}
和END {}
块,以确保它们分别在代码主要部分之前和之后运行。
我有以下代码:
BEGIN {
$my_args = ARGV.dup
ARGV.clear
} # clean up 'gets'
# For the truly paranoid in all of us
def self.run_away?
print "You're paranoid. Exit? (Y/n) "
ans = gets.chomp.downcase
if ["no", "n"].include?(ans)
puts "Alright, your call. Let's keep going."
else
puts "EXITING"
log("Exiting at paranoid users request.")
exit 3
end
end
END { } # do stuff here
我在脚本中定义了一些错误代码。 我希望能够读取错误代码并根据该代码打印简短说明。 例如EXITING - 3: Exit at user request
每次我在代码中使用exit
, EXITING - 3: Exit at user request
而不是编写描述性字符串。 是否可以在END {}
块中执行此操作? 还是我想念的其他东西?
编辑/注意:我坚持使用Ruby 1.8.7
,以下内容不起作用:(
请参见下文)
BEGIN { puts "BEGIN block!" }
puts "Main block!"
exit 3
END {
puts "END block!"
puts "Current Exception: \n#{$!}"
puts "Current Backtrace: \n#{$@}"
}
输出:
~: $ ./test.rb
BEGIN block!
Main block!
~: $ echo $?
3
~: $
编辑#2:我必须在退出之前定义END
块。 感谢@Stefan
Kernel#exit
引发SystemExit
异常,并且由于全局变量$!
包含当前异常,您可以通过$!.status
获取退出$!.status
:
END {
puts "exit status: #{$!.status}"
}
exit 3
输出:
exit status: 3
从文档中 :
如果引发了异常但尚未处理异常(在
rescue
,请ensure
at_exit
和END
块),则全局变量$!
将包含当前异常,而$@
包含当前异常的回溯。
集中退出消息的一种方法:
module Kernel
alias :real_exit :exit
def exit status
puts "Hello World"
real_exit status
end
end
该方法只是Kernel#exit方法的一个别名。 请注意,一旦您定义了该替代,所有其他出口呼叫将遍历您的替代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.