Ruby脚本如何检测到它正在irb中运行?

Ruby脚本如何检测到它正在irb中运行?,ruby,irb,Ruby,Irb,我有一个定义类的Ruby脚本。我希望脚本执行该语句 BoolParser.generate :file_base=>'bool_parser' 仅当脚本作为可执行文件调用时,而不是从irb调用脚本时(或通过-r在命令行上传递)。在加载Ruby文件时,如何包装上述语句以防止其执行?使用$0 在irb中,0美元的价值为“irb” 您的文件中有“/path/to/file” 一种解释条件$0==\uuuuuu文件 !/usr/bin/ruby1.8 class BoolParser d

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

BoolParser.generate :file_base=>'bool_parser'
仅当脚本作为可执行文件调用时,而不是从irb调用脚本时(或通过
-r
在命令行上传递)。在加载Ruby文件时,如何包装上述语句以防止其执行?

使用$0

在irb中,0美元的价值为“irb”

您的文件中有“/path/to/file”


一种解释

条件$0==\uuuuuu文件

!/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
。。。从命令行运行脚本时为true

$ /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>