2011-12-20 12 views
27

Sto cercando di ottenere un riferimento allo script passato all'interprete ruby. Ad esempio, se sto utilizzando ruby foo.rb voglio ottenere un riferimento al file foo.rb.Ruby: recupera il file in esecuzione

Penso che in Python ciò sia accessibile tramite sys.argv[0]. Si potrebbe chiamare __FILE__ ma questa non è la soluzione che sto cercando, poiché __FILE__ restituisce il file all'interno del quale si trova il codice attualmente eseguito.

C'è un modo per farlo?

risposta

40

Ho trovato $0 è il nome del file utilizzato per avviare il programma. Abbastanza facile

+8

alse $ PROGRAM_NAME –

31

Utilizzare i metodi nella classe File di manipolare FILE

All'interno test.rb, ho

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

Quando si esegue,

ruby a/b/test.rb 

Si ottiene

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

non funzionerà http://softwareapprenticeship.wordpress.com/2009/05/20/0-in-ruby-is-worth-more-than-youd-think/ – Bohdan

+0

Come detto _ _ FILE _ _ ottiene il file corrente dello script in esecuzione. Cioè per codice in test.rb restituirà sempre test.rb, per il codice in qualcosa_else.rb restituirà sempre qualcosa_else.rb. La mia domanda era di restituire lo script inizialmente eseguito da interprete ruby. –

+0

Questa è la risposta che stavo cercando. Quando eseguo file da 'irb', non voglio' $ 0' per dirmi che il nome del programma è 'irb', ma voglio sapere quale file di script viene eseguito. –

Problemi correlati