2010-02-09 57 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

相關問題