2010-12-01 11 views
2

Mögliche Duplizieren:
How do I find the ruby interpreter?Ruby-Interpreters Name

Wie kann ich die aktuell laufenden Ruby 1.8 Interpreter Name in Ruby (zB /usr/bin/ruby) erhalten, dh die argv[0] zum main() C bestanden Funktion. Ich bin nicht interessiert an $0, denn das ist der Name der Skriptdatei .rb. Ich bin auch nicht an Config::CONFIG interessiert, denn das war gefüllt, als Ruby installiert wurde - aber ich bin interessiert, wo es now ausgeführt wird.

Nehmen wir an, /usr/bin/ruby ist ein Symlink zu /usr/bin/ruby1.8. Wie kann ich herausfinden, ob mein Ruby-Skript als /usr/bin/ruby1.8 myscript.rb oder /usr/bin/ruby myscript.rb gestartet wurde?

Antwort

0

Hier ist eine Linux-only Lösung:

p File.open("/proc/self/cmdline") { |f| f.read.sub(/\0.*/m, "") } 

Für Ruby 1.8 ruby.cVALUE rb_argv0; definiert, welche diese enthält Informationen, aber diese Variable ist in Ruby-Skripten nicht verfügbar.

1

Siehe How do I find the ruby interpreter?

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

Wenn Sie Ruby-wollen, spezifische Informationen überprüfen Sie die RUBY_* Konstanten

>> RUBY_ 
RUBY_COPYRIGHT  RUBY_ENGINE  RUBY_PLATFORM  RUBY_REVISION 
RUBY_DESCRIPTION RUBY_PATCHLEVEL RUBY_RELEASE_DATE RUBY_VERSION 
+0

Vielen Dank für Ihre Hilfe, aber das ist keine gute Antwort auf meine Frage, weil ich nicht interessiert bin, wo der Interpreter kopiert wurde, als er installiert wurde (das kann ich von 'CONFIG :: Config' bekommen) , aber ich interessiere mich dafür, wo der Interpreter gerade ist (dh die 'argv [0]' der C 'main'-Funktion). Was mich interessiert, ist nicht in 'Config :: CONFIG'. – pts

0

@ Injekt Antwort den Pfad zum Interpreter hat.

So finden Sie die Einzelheiten zur Konfiguration.

Rubys Konfigurationsinformationen werden während der Kompilierung in rbconfig.rb gespeichert, damit wir die Einzelheiten der Installation sehen können. Diese Information wird in Objekt gezogen wird, wenn der Interpreter gestartet, so können wir die Werte erhalten:

>> Object.constants.select{ |c| c[/^RUBY/] } 
=> [:RUBY_VERSION, :RUBY_RELEASE_DATE, :RUBY_PLATFORM, :RUBY_PATCHLEVEL, :RUBY_REVISION, :RUBY_DESCRIPTION, :RUBY_COPYRIGHT, :RUBY_ENGINE] 

>> RUBY_DESCRIPTION #=> "ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]" 
+0

Vielen Dank für die Bereitstellung von interessanten Informationen über Ruby, aber was Sie geschrieben haben beantwortet meine Frage nicht. – pts

+0

Wie ich sagte, "@ injekts Antwort hat den Weg zum Dolmetscher." Ich erweitere es, indem ich andere nützliche Informationen zeige. –