2010-02-09 65 views
5

我有一个定义类的Ruby脚本。我想脚本来执行该语句Ruby脚本如何检测到它在irb中运行?

BoolParser.generate :file_base=>'bool_parser' 

只有当脚本调用为可执行文件,而不是当它是require“从IRB D(或通过-r在命令行上传递)。我可以绕过上面的语句来阻止它在我的Ruby文件加载时执行?

回答

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脚本加载的文件。

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

$ 0

在IRB $ 0值用的是 “IRB”

在文件

是 “/路径/到/文件”

解释here

相关问题