2010-11-18 25 views
2

irb可以將命令歷史記錄寫入文件,但它僅在irb會話結束時執行此操作。頻繁將irb歷史刷新到文件

我想更頻繁地寫出我的命令歷史記錄:就像每個命令一樣(比如shell歷史記錄),但它不一定非常頻繁。

是否存在.irbrc設置?或者將我必須破解IRB源...

回答

4

已經在IRB砍死很多時候,運氣好的話,用乾淨的解決方案。相反,我會推薦ripl,一個irb替代品。默認情況下,它會更加智能地保存歷史記錄(即使您突然用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 
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