我有一个会陷阱的程序Ctrl + c,但它只能被困一次.当您键入exit以退出irb会话时,生成的信号Ctrl + c不能再次被捕获.有任何想法吗?这是该计划:
require 'irb'
#trap "INT" do
# IRB.start
#end
Signal.trap("INT") { IRB.start }
count = 0
loop do
count += 1
puts count
puts "Value = #{@value}" if defined? @value
sleep 1
end
Run Code Online (Sandbox Code Playgroud)
问题是IRB在调用它时为sigint设置了自己的处理程序,它会覆盖你的处理程序.要解决此问题,您可以在IRB完成后再次重置处理程序,如下所示:
def set_trap
Signal.trap("INT") do
IRB.start
set_trap
end
end
set_trap
Run Code Online (Sandbox Code Playgroud)
这会在第二次调用IRB时引发一堆警告,但这是多次调用IRB的一般问题.