2011-11-30 23 views
1

當用戶使用Control + c終止整個腳本時,是否有保留的命令名?例如,如果我想在腳本終止時執行puts "Script terminated by user.",我該怎麼做?按Ctrl + C終止時運行的命令

回答

3
trap("INT") do 
    puts "Script terminated by user." 
    exit 
end 

sleep 10 

運行這個,然後按ctrl-c。

2

Kernel.trap方法可用於指定信號處理程序。

0

隨着其他兩個答案的幫助下,我查閱了一些相關的方法在Kernel,並發現,還存在一些其他的方法:

trap(0){puts "Script terminated by user."} 

at_exit{puts "Script terminated by user."} 
+0

at_exit將打印信息,CTRL-C或沒有。 – steenslag

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