2011-12-20 12 views
27

Estoy tratando de obtener una referencia al script que se pasó al intérprete de ruby. Por ejemplo, si estoy ejecutando ruby foo.rb, quiero obtener una referencia al archivo foo.rb.Ruby: obtener el archivo que se está ejecutando

Creo que en Python esto sería accesible a través de sys.argv[0]. Uno podría llamar al __FILE__, pero esta no es la solución que estoy buscando, dado que __FILE__ produce el archivo dentro del cual se encuentra el código actualmente en ejecución.

¿Hay alguna manera de hacerlo?

Respuesta

40

Encontré $0 es el nombre del archivo utilizado para iniciar el programa. Suficientemente fácil.

+8

alse $ PROGRAM_NAME –

31

Use métodos de la clase de archivos para manipular ARCHIVO

Dentro test.rb, tengo

puts __FILE__ 
puts File.dirname(__FILE__) 
puts File.basename(__FILE__) 

Cuando se ejecuta,

ruby a/b/test.rb 

Se obtiene

a/b/test.rb 
a/b 
test.rb 
+0

no funcionará http://softwareapprenticeship.wordpress.com/2009/05/20/0-in-ruby-is-worth-more-than-youd-think/ – Bohdan

+0

Como se ha dicho _ _ ARCHIVO _ _ obtiene el archivo actual del script de ejecución. Eso es para el código en test.rb siempre devolverá test.rb, para el código en something_else.rb siempre devolverá something_else.rb. Mi pregunta era devolver el script inicialmente ejecutado por el intérprete de ruby. –

+0

Esta es la respuesta que estaba buscando. Cuando ejecuto archivos desde 'irb', no quiero que' $ 0' me diga que el nombre del programa es 'irb', pero quiero saber qué archivo de script se está ejecutando. –

Cuestiones relacionadas