Wie kann ein Ruby -Skript erkennen, dass es in IRB ausgeführt wird?
Frage
Ich habe ein Ruby -Skript, das eine Klasse definiert. Ich möchte, dass das Skript die Anweisung ausführt
BoolParser.generate :file_base=>'bool_parser'
Nur wenn das Skript als ausführbare Datei aufgerufen wird, nicht, wenn es ist require
'D von IRB (oder die Befehlszeile über weitergegeben über -r
). Was kann ich um die obige Anweisung einwickeln, um zu verhindern, dass sie ausgeführt wird, wenn meine Ruby -Datei geladen wird?
Lösung
Die Bedingung $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
... ist wahr, wenn das Skript aus der Befehlszeile ausgeführt wird ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... aber falsch, wenn die Datei von einem anderen Ruby -Skript benötigt oder geladen wird.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
Andere Tipps
Verwenden Sie $ 0
In IRB lautet der Wert von 0 USD "IRB"
In Ihrer Datei befindet sich "/path/to/Datei"
eine Erklärung hier
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow