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

时间:2010-02-09 05:34:01

标签: ruby irb

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

BoolParser.generate :file_base=>'bool_parser'

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

2 个答案:

答案 0 :(得分:13)

条件$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> 

答案 1 :(得分:4)

使用$ 0

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

您文件中的

是“/ path / to / file”

解释here