【问题标题】:How can a Ruby script detect that it is running in irb?Ruby 脚本如何检测到它在 irb 中运行?
【发布时间】:2010-02-09 05:34:01
【问题描述】:

我有一个定义类的 Ruby 脚本。我希望脚本执行语句

BoolParser.generate :file_base=>'bool_parser'

仅当脚本作为可执行文件被调用时,而不是当它是来自 irb 的require'd(或通过-r 在命令行上传递)时。我可以用什么包裹上面的语句以防止它在我的 Ruby 文件加载时执行?

【问题讨论】:

    标签: ruby irb


    【解决方案1】:

    条件$0 == __FILE__ ...

    !/usr/bin/ruby1.8
    
    class BoolParser
    
      def self.generate(args)
        p ['BoolParser.generate', args]
      end
    
    end
    
    if $0 == __FILE__
      BoolParser.generate(:file_base=>__FILE__)
    end
    

    ...从命令行运行脚本时为真...

    $ /tmp/foo.rb
    ["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
    

    ...但当另一个 ruby​​ 脚本需要或加载该文件时为 false。

    $ irb1.8
    irb(main):001:0> require '/tmp/foo'
    => true
    irb(main):002:0> 
    

    【讨论】:

      【解决方案2】:

      使用 $0

      在 irb 中,$0 的值是“irb”

      在你的文件中是“/path/to/file”

      解释here

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2019-03-21
        • 2020-09-01
        • 2011-09-02
        相关资源
        最近更新 更多