经常将irb历史记录刷新到文件

时间:2010-11-18 19:54:24

标签: ruby irb

irb可以将命令历史记录写入文件,但只有在irb会话结束时才会执行此操作。

我想更频繁地写出我的命令历史记录:就像每个命令一样(如shell历史记录),但不一定经常这样。

这是否有.irbrc设置?或者我必须破解irb源...

2 个答案:

答案 0 :(得分:4)

多次攻击irb,祝你有一个干净的解决方案。相反,我建议ripl,一个替代品。默认情况下,它会更智能地保存历史记录(即使您突然退出Control-D)。

如果你想在每个命令之后写历史记录,那么使用ripl很容易,因为它是用插件扩展的:

# add to your ~/.riplrc
module Ripl::ImmediateHistory
  # write to history after every eval
  def eval_input(input)
    super
    File.open(history_file, 'a') {|f| f.puts input }
  end

  # disable writing to history when ripl exits
  def write_history; end
end
Ripl::Shell.send :include, Ripl::ImmediateHistory

答案 1 :(得分:3)

从这里开始:http://blog.nicksieger.com/articles/2006/04/23/tweaking-irb

module Readline
  module History
    LOG = "#{ENV['HOME']}/.irb-history"

    def self.write_log(line)
      File.open(LOG, 'ab') {|f| f << "#{line}
"}
    end

    def self.start_session_log
      write_log("
# session start: #{Time.now}

")
      at_exit { write_log("
# session stop: #{Time.now}
") }
    end
  end

  alias :old_readline :readline
  def readline(*args)
    ln = old_readline(*args)
    begin
      History.write_log(ln)
    rescue
    end
    ln
  end
end

Readline::History.start_session_log