如何抑制Rails控制台/ irb输出

时间:2011-01-13 09:59:23

标签: ruby-on-rails ruby irb

我遇到了一个非常奇怪的问题。

我在Rails控制台的生产服务器中测试了一些数据库条目,其中几乎所有命令都产生了大量的o / p行,因此ssh通道被挂起:(

有没有办法抑制控制台/ irb屏幕?

由于

6 个答案:

答案 0 :(得分:173)

你可以附加 ;没有 到你的所有命令/陈述。

示例:

users = User.all; nil

实际上,irb打印最后执行的语句的(返回)值。因此,在这种情况下,它将只打印nil,因为nil是最后执行的有效语句:)

答案 1 :(得分:29)

为了寻找如何使irb / console输出静音的解决方案,我还在austinruby.com找到了答案:

沉默irb:

conf.return_format = ""

默认输出:

conf.return_format = "=> %s\n"

限制为例如512个字符:

conf.return_format = "=> limited output\n %.512s\n"

答案 2 :(得分:9)

在此处,将此添加到〜/ .irbrc:

require 'ctx'
require 'awesome_print'

module IRB
  class Irb    
    ctx :ap do
      def output_value()
        ap(@context.last_value)
      end
    end
    ctx :puts do
      def output_value()
        puts(@context.last_value)
      end
    end
    ctx :p do
      def output_value()
        p(@context.last_value)
      end
    end
    ctx :quiet do
      def output_value()
      end
    end
  end
end

def irb_mode(mode)
  ctx(mode) { irb }
end

(注意:您必须先安装ctx gem,当然awesome_print是可选的。)

现在,当您使用任何使用irb的控制台时,您可以执行以下操作:

普通模式:

irb(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {:this=>"is a complex object", :that=>[{:will=>"probably"}, {:be=>"good to read"}], :in=>{:some=>{:formatted=>"way"}}}

...是的,正是你所期待的。

awesome_print模式:

irb(main):002:0> irb_mode(:ap)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {
    :this => "is a complex object",
    :that => [
        [0] {
            :will => "probably"
        },
        [1] {
            :be => "good to read"
        }
    ],
      :in => {
        :some => {
            :formatted => "way"
        }
    }
}

...哇,现在一切都打印出来了! :)

安静模式:

irb#1(main):002:0> irb_mode(:quiet)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }
irb#1(main):002:0>

......哇,根本没有输出?好的。

无论如何,你可以添加你喜欢的任何模式,当你完成该模式时,只需exit或者它,你就会回到以前的模式。

希望有用! :)

答案 3 :(得分:5)

抑制输出,一般

此外,根据您的需要,请看一下使用quietlysilence_stream来抑制输出,而不仅仅是在irb / console中:

silence_stream(STDOUT) do
  users = User.all
end

注意:{@ 1}}将在Ruby 2.2.0中弃用,最终将被删除。 (谢谢BenMorganIO!)

可以找到更多信息here

答案 4 :(得分:3)

$ irb --simple-prompt --noecho

答案 5 :(得分:0)

在irb中运行以下内容对我有用:

irb_context.echo = false