代码之家  ›  专栏  ›  技术社区  ›  ReWrite

Ruby脚本如何检测它在IRB中运行?

  •  5
  • ReWrite  · 技术社区  · 15 年前

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

    BoolParser.generate :file_base=>'bool_parser'
    

    仅当脚本作为可执行文件调用时,而不是 require 'd来自IRB(或通过 -r )。我可以将上面的语句包装起来,以防止它在加载Ruby文件时执行?

    2 回复  |  直到 14 年前
        1
  •  13
  •   Wayne Conrad    15 年前

    条件 $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
  •  4
  •   makevoid    15 年前

    使用0美元

    在IRB中,0美元的价值是“IRB”

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

    解释 here