سؤال

تكرار ممكن:
كيف أجد مترجم روبي؟

كيف أحصل على اسم مترجم 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]"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top