2011-12-20 19 views
27

Próbuję uzyskać odniesienie do skryptu przekazanego interpreterowi ruby. Na przykład, jeśli używam wersji ruby foo.rb, chcę uzyskać odwołanie do pliku foo.rb.Ruby - pobierz plik do wykonania

Myślę, że w Pythonie będzie to dostępne przez sys.argv[0]. Można zadzwonić pod numer __FILE__, ale nie jest to rozwiązanie, którego szukam, ponieważ __FILE__ daje plik, w którym znajduje się aktualnie wykonywany kod.

Czy jest jakiś sposób na zrobienie tego?

Odpowiedz

40

Znalazłem $0 jest nazwą pliku używanego do uruchomienia programu. Wystarczająco łatwe.

+8

ALSE $ Nazwa_programu –

31

Stosować metody w klasie pliku manipulować PLIK

Wewnątrz test.rb mam

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

Po uruchomieniu,

ruby a/b/test.rb 

Otrzymasz

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

nie zadziała http://softwareapprenticeship.wordpress.com/2009/05/20/0-in-ruby-is-worth-more-than-youd-think/ – Bohdan

+0

Jak powiedział _ _ FILE _ _ pobiera bieżący plik skryptu wykonującego. To znaczy, że dla kodu w pliku test.rb zawsze zwróci on test.rb, ponieważ kod w something_else.rb zawsze zwróci coś_else.rb. Moje pytanie dotyczyło powrotu skryptu początkowo uruchamianego przez tłumacza ruby. –

+0

Oto odpowiedź, której szukałem. Podczas uruchamiania plików z 'irb', nie chcę, aby' $ 0' mówił mi, że nazwa programu to 'irb', ale chcę wiedzieć, który plik skryptu jest wykonywany. –