¿Cómo puede un script de Ruby detectar que se está ejecutando en IRB?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Tengo un script de rubí que define una clase. Me gustaría que el script ejecute la declaración

BoolParser.generate :file_base=>'bool_parser'

solo cuando el script se invoca como ejecutable, no cuando es require'D de IRB (o pasado en la línea de comando a través de -r). ¿Qué puedo envolver la declaración anterior para evitar que se ejecute cada vez que se cargue mi archivo Ruby?

¿Fue útil?

Solución

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 el script se ejecuta desde la línea de comando ...

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

... pero falso cuando el archivo es requerido o cargado por otro script de Ruby.

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

Otros consejos

Usa $ 0

En IRB, el valor de $ 0 es "IRB"

en su archivo está "/ruta/a/archivo"

una explicación aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top