Ruby解释器名称

时间:2010-12-01 14:25:06

标签: ruby interpreter argv

  

可能重复:
  How do I find the ruby interpreter?

如何在Ruby中获取当前运行的Ruby 1.8解释器名称(例如/usr/bin/ruby),即传递给C argv[0]函数的main()。我对$0不感兴趣,因为这是.rb脚本文件的名称。我对Config::CONFIG也不感兴趣,因为在安装Ruby时它已经填满了 - 但我对它运行的位置感兴趣now

我们假设/usr/bin/ruby/usr/bin/ruby1.8的符号链接。如何知道我的Ruby脚本是以/usr/bin/ruby1.8 myscript.rb还是/usr/bin/ruby myscript.rb启动的?

3 个答案:

答案 0 :(得分:1)

请参阅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"])

如果您想要特定于Ruby的信息,请查看RUBY_*常量

>> RUBY_
RUBY_COPYRIGHT     RUBY_ENGINE        RUBY_PLATFORM      RUBY_REVISION
RUBY_DESCRIPTION   RUBY_PATCHLEVEL    RUBY_RELEASE_DATE  RUBY_VERSION

答案 1 :(得分:0)

@ injekt的答案有解释路径。

以下是如何查找有关配置的详细信息。

Ruby的配置信息在编译期间存储在rbconfig.rb中,因此我们可以看到安装的细节。当解释器启动时,该信息被拉入Object中,因此我们可以获得值:

>> 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]"

答案 2 :(得分:0)

这是一个仅限Linux的解决方案:

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

对于Ruby 1.8,ruby.c定义了包含此信息的VALUE rb_argv0;,但该变量在Ruby脚本中不可用。