当用户使用Control + c终止整个脚本时,是否会保留一个保留的命令名?例如,如果我想在脚本终止时执行puts "Script terminated by user."
,我该怎么办呢?
答案 0 :(得分:3)
trap("INT") do
puts "Script terminated by user."
exit
end
sleep 10
运行此命令,然后点击ctrl-c。
答案 1 :(得分:2)
Kernel.trap
方法可用于指定信号处理程序。
答案 2 :(得分:0)
在其他两个答案的帮助下,我在Kernel
中查找了一些相关的方法,并发现还有其他一些方法:
trap(0){puts "Script terminated by user."}
或
at_exit{puts "Script terminated by user."}
答案 3 :(得分:0)
我发现这是退出脚本的更优雅方式。如果您想要干净地退出并确保脚本保持一致状态,这非常有用。
http://futuresimple.github.com/posts/2012-02-24-graceful-exiting-from-console-programs-in-ruby/
require "singleton"
class GracefulQuit
include Singleton
attr_accessor :breaker
def initialize
self.breaker = false
end
def self.enable
trap('INT') {
yield if block_given?
self.instance.breaker = true
}
end
def self.check(message = "Quitting")
if self.instance.breaker
yield if block_given?
puts message
exit
end
end
end
然后你可以在你的剧本中写下这个:
require 'graceful_quit'
GracefulQuit.enable{puts "Exit signal received..."}
puts "Control-C to exit"
while(true)
...
# something that you want to make sure finishes before you exit
...
GracefulQuit.check("Done.")
sleep(10)
end