سؤال
تكرار ممكن:
كيف أجد مترجم روبي؟
كيف أحصل على اسم مترجم Ruby 1.8 الذي يعمل حاليًا في Ruby (على سبيل المثال /usr/bin/ruby
) ، أي argv[0]
انتقل إلى ج main()
وظيفة. أنا لست مهتمًا بـ $0
, ، لأن هذا هو اسم .rb
ملف البرنامج النصي. أنا أيضًا غير مهتم بـ Config::CONFIG
, ، لأن ذلك تم شغله عندما تم تثبيت روبي - لكنني مهتم بالمكان الذي يعمل فيه now
.
دعونا نفترض /usr/bin/ruby
هو ارتباط /usr/bin/ruby1.8
. كيف يمكنني معرفة ما إذا كان نصي روبي قد بدأ كـ /usr/bin/ruby1.8 myscript.rb
أو /usr/bin/ruby myscript.rb
?
المحلول 3
هنا حل Linux فقط:
p File.open("/proc/self/cmdline") { |f| f.read.sub(/\0.*/m, "") }
لروبي 1.8 ، ruby.c
تعريف VALUE rb_argv0;
الذي يحتوي على هذه المعلومات ، ولكن هذا المتغير غير متوفر في البرامج النصية Ruby.
نصائح أخرى
require 'rbconfig'
RUBY_INTERPRETER_PATH = File.join(Config::CONFIG["bindir"],
Config::CONFIG["RUBY_INSTALL_NAME"] +
Config::CONFIG["EXEEXT"])
إذا كنت تريد معلومات محددة من روبي تحقق من RUBY_*
الثوابت
>> RUBY_
RUBY_COPYRIGHT RUBY_ENGINE RUBY_PLATFORM RUBY_REVISION
RUBY_DESCRIPTION RUBY_PATCHLEVEL RUBY_RELEASE_DATE RUBY_VERSION
@إجابة injekt لها الطريق إلى المترجم.
إليك كيفية العثور على التفاصيل حول التكوين.
يتم تخزين معلومات تكوين Ruby في rbconfig.rb أثناء التجميع حتى نتمكن من رؤية تفاصيل التثبيت. يتم سحب هذه المعلومات إلى كائن عندما يبدأ المترجم المترجم حتى نتمكن من الوصول إلى القيم:
>> 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]"