In Rails 4 rails console
I can type history
and it will behave just like the history
command from the bash shell. E.g.:
[25] my_rails_project » history
1: Nomination
2: {:ad => "asdfsdasadf"}
3: Nomination.count
4: Nomination.count.to_sql
5: Nomination.all.class
6: Nomination.all.to_sql
...
Is there a way to search that history, e.g. history | grep Nomination
? How about tail?
Note: When I initially wrote this question I thought the history
command came from Rails itself, but it comes from the pry
gem which I have in my system (my Gemfile specifies the jazz_hands
gem which pulls in pry). Pry does in fact have a grep
feature, e.g. history --grep Nomination
will give me lines 1 and 3-6 above. It also has a tail
feature. These are documented here: https://github.com/pry/pry/wiki/History
You can use ~/.irb-history
for this purpose. So, the following can be used (you must be knowing how to do this, but this is only for reference):
tail -fn0 ~/.irb-history # for tailing
cat ~/.irb-history | grep something # for searching
Note that, you might have both the files: ~/.irb-history
and ~/.irb_history
, and any one of them can be more up to date than the other. I have not been able to resolve this mystery yet. So, use the one you find more suitable for yourself.
UPDATE: You can access history in a variable using the following logic (it took me a while to read the code Pry uses, try edit history
inside pry):
def pry_history
arr = []
history = Pry::History.new
history.send(:read_from_file) do |line|
arr.push line.chomp
end
arr
end
Now, you can simply call pry_history
to get an array of pry's history. You can further save it inside your .pryrc
configuration file and use it whenever you want in pry.