Rails控制台历史命令(通过pry) - 它可以是grepped还是tailed?

时间:2013-12-19 22:15:09

标签: ruby-on-rails history irb pry

在Rails 4中rails console我可以输入history,它的行为就像bash shell中的history命令一样。 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
  ...

有没有办法搜索该历史记录,例如history | grep Nomination?尾巴怎么样?

注意:当我最初写这个问题时,我认为history命令来自Rails本身,但它来自我系统中的pry gem(我的Gemfile指定{{1}宝石,它拉入撬)。事实上,Pry确实具有jazz_hands功能,例如grep会给我上面第1和第3-6行。它还具有history --grep Nomination功能。这些记录在此处:https://github.com/pry/pry/wiki/History

3 个答案:

答案 0 :(得分:5)

您可以将~/.irb-history用于此目的。因此,可以使用以下内容(您必须知道如何执行此操作,但这仅供参考):

tail -fn0 ~/.irb-history  # for tailing
cat ~/.irb-history | grep something # for searching

请注意,您可能同时拥有这两个文件:~/.irb-history~/.irb_history,其中任何一个文件都可以比其他文件更新。我还没能解决这个谜团。所以,使用你觉得更适合自己的那个。


更新:您可以使用以下逻辑访问变量中的历史记录(我花了一些时间阅读Pry使用的代码,在pry中尝试edit history):

 def pry_history
   arr = []
   history = Pry::History.new
   history.send(:read_from_file) do |line|
     arr.push line.chomp
   end
   arr
 end

现在,您只需致电pry_history即可获得一系列撬的历史记录。您可以进一步将其保存在.pryrc配置文件中,并在需要时随时使用它。

答案 1 :(得分:3)

  1. 转到rails控制台

  2. <ctrl> + r并输入命令的几个字母。

  3. 使用<ctrl> + r选择与搜索匹配的其他命令

  4. 使用<ctrl> + <shift> + r以反方向选择命令

  5. 与bash shell中的<ctrl> + r完全相同

答案 2 :(得分:0)

这可能就是你要找的东西:

def search_history(filter)
    puts `cat ~/.irb-history | grep "#{filter}"`
end