Много раз взломав 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