Rubyスクリプトは、IRBで実行されていることをどのように検出できますか?

StackOverflow https://stackoverflow.com/questions/2226979

  •  19-09-2019
  •  | 
  •  

質問

クラスを定義するRubyスクリプトがあります。スクリプトにステートメントを実行したいと思います

BoolParser.generate :file_base=>'bool_parser'

スクリプトが実行可能ファイルとして呼び出された場合にのみ、 requireIRBから(またはコマンドラインで渡された -r)。 Rubyファイルがロードされるたびに実行されないように、上記のステートメントを何を包み込むことができますか?

役に立ちましたか?

解決

状態 $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> 

他のヒント

$ 0を使用します

IRBでは、$ 0の値は「IRB」です

ファイルには「/path/to/file」があります

説明 ここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top