2010-02-09 41 views
5

Tengo un script de Ruby que define una clase. Me gustaría que la secuencia de comandos para ejecutar la instrucción¿Cómo puede un script de Ruby detectar que se está ejecutando en irb?

BoolParser.generate :file_base=>'bool_parser' 

sólo cuando el guión se invoca como un ejecutable, no cuando es require 'd del IRB (o pasar en la línea de comandos a través de -r). ¿Qué puedo incluir en la declaración anterior para evitar que se ejecute cada vez que se carga mi archivo Ruby?

Respuesta

13

La condición $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 

... es cierto cuando la secuencia de comandos se ejecuta desde la línea de comandos ...

$ /tmp/foo.rb 
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}] 

... pero falsa cuando se requiere o se carga por otro script rubí el archivo.

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

usar $ 0

en IRB el valor de $ 0 es "IRB"

en su archivo es "/ ruta/a/archivo"

una explicación here

Cuestiones relacionadas