2010-05-11 15 views
13

Wewnątrz skryptu ruby, jak uzyskać ścieżkę do interpretera ruby?Jak znaleźć tłumacza ruby?

Przykład skryptu:

#!/path/to/ruby 
    puts `#{RUBY_INTERPRETER_PATH} -e "puts 'hi'"` 
    #EOF 

Gdzie RUBY_INTERPRETER_PATH jest mityczny sposób na znalezienie /path/to/ruby.

To tylko przykład. W tym przypadku zdaję sobie sprawę, że mogę skopiować do skryptu /path/to/ruby, ale nie chcę tego robić. Chcę, aby to działało "poprawnie" bez względu na to, co mówi linia #!. Nawet jeśli działa pod oknami.

Ciao!

Odpowiedz

13

te dni (1.9+), można użyć wbudowanej metody (które mają pracować z JRuby, etc.) jak poniżej:

RbConfig.ruby lub Gem.ruby

$ irb --simple-prompt 
>> RbConfig.ruby 
=> "C:/installs/Ruby193/bin/ruby.exe" 
>> Gem.ruby 
=> "C:/installs/Ruby193/bin/ruby.exe" 
+0

Mogę potwierdzić, że działa dla jruby: 'ruby -e 'umieszcza RbConfig.ruby' =>/usr/local/var/rbenv/versions/jruby-1.7.4/bin/jruby' –

+1

Nawet na 1.8, mógłbyś' wymagać "rubygemów"; umieszcza (Gem.ruby()) '. Czy byłby to poprawny, per @ user945466, gdyby ktoś zainstalował taką binarkę w innym miejscu? W systemie Linux można uzyskać gwarantowaną odpowiedź za pomocą 'puts (File.readlink ("/proc/self/exe "))'. –

15

Aby uzyskać ścieżkę aktualnie działającej rubinowym tłumacza:

require 'rbconfig' 
RUBY_INTERPRETER_PATH = File.join(RbConfig::CONFIG["bindir"], 
            RbConfig::CONFIG["RUBY_INSTALL_NAME"] + 
            RbConfig::CONFIG["EXEEXT"]) 
+2

źródło: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/151376 – ryeguy

+1

Ciągle zapominam o 'rbconfig'; To bardzo przydatne. –

+1

Podczas gdy odpowiedź używająca "rbconfig" jest bardzo przydatna do znalezienia ścieżki do zainstalowanego interpretera Ruby, NIE GWARANTUJE, że TEN proces jest faktycznie instancją tego tłumacza działającego. Może to być całkowicie inny plik wykonywalny znajdujący się w innym miejscu systemu. –

Powiązane problemy