2

可能重复:
如何找到 ruby​​ 解释器?

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

让我们假设/usr/bin/ruby是一个符号链接到/usr/bin/ruby1.8. 如何知道我的 Ruby 脚本是否以/usr/bin/ruby1.8 myscript.rb或启动/usr/bin/ruby myscript.rb

4

3 回答 3

1

请参阅如何找到 ruby​​ 解释器?

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
于 2010-12-01T15:10:12.557 回答
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]"
于 2010-12-01T15:43:27.077 回答
0

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

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

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

于 2010-12-06T09:35:46.477 回答