2010-02-09 2 views
5

클래스를 정의하는 Ruby 스크립트가 있습니다. 나는 스크립트가 require가 'IRB에서 거라고하지 경우, 실행 파일로 호출 (또는 -r를 통해 명령 줄에서 전달)에만 문Ruby 스크립트가 irb에서 실행 중임을 어떻게 감지합니까?

BoolParser.generate :file_base=>'bool_parser' 

을 실행하는 스크립트를하고 싶습니다. 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"}] 

... 파일이 필요하거나 다른 루비 스크립트로로드 될 때 false입니다.

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

$ 0

$ 0 값을 IRB의 사용은 "IRB"당신의 파일에

은 "/ 경로 /로/파일"

설명 here