Frequentemente lavar o histórico do IRB para arquivar
Pergunta
O IRB pode escrever o histórico de comando em um arquivo, mas só faz isso quando a sessão do IRB terminar.
Gostaria de escrever meu histórico de comando com mais frequência: com mais frequência como em todos os comando (como a história da concha), mas não precisa ser com tanta frequência.
Existe uma configuração .Irbrc para isso? Ou terei que invadir a fonte do IRB ...
Solução
Tendo invadido o IRB muitas vezes, boa sorte com uma solução limpa. Em vez disso, eu recomendaria RIPL, uma alternativa do IRB. Por padrão, ele salva a história de maneira mais inteligente (ou seja, mesmo quando você sai abruptamente com o Control-D).
Se você deseja escrever histórico após cada comando, é fácil com o RIPL, pois é construído para ser estendido com plugins:
# 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
Outras dicas
Daqui: http://blog.nicksieger.com/articles/2006/04/23/twaken-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