Ruby 解释器名称

发布于 2024-10-05 09:00:54 字数 601 浏览 2 评论 0原文

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

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

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

Possible Duplicate:
How do I find the ruby interpreter?

How do I get the currently running Ruby 1.8 interpreter name in Ruby (e.g. /usr/bin/ruby), i.e. the argv[0] passed to the C main() function. I'm not interested in $0, because that's the name of the .rb script file. I'm also not interested in Config::CONFIG, because that was filled when Ruby was installed -- but I'm interested in where it is running now.

Let's suppose /usr/bin/ruby is a symlink to /usr/bin/ruby1.8. How do I get to know if my Ruby script has been started as /usr/bin/ruby1.8 myscript.rb or /usr/bin/ruby myscript.rb?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白衬杉格子梦 2024-10-12 09:00:54

请参阅如何找到 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

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

If you want Ruby specific information check out the RUBY_* constants

>> RUBY_
RUBY_COPYRIGHT     RUBY_ENGINE        RUBY_PLATFORM      RUBY_REVISION
RUBY_DESCRIPTION   RUBY_PATCHLEVEL    RUBY_RELEASE_DATE  RUBY_VERSION
浮华 2024-10-12 09:00:54

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

@injekt's answer has the path to the interpreter.

Here's how to find the particulars about the configuration.

Ruby's configuration info is stored in rbconfig.rb during compilation so we can see the particulars of the installation. That information is pulled into Object when the interpreter starts so we can get at the values:

>> 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]"
非要怀念 2024-10-12 09:00:54

以下是仅适用于 Linux 的解决方案:

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

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

Here is a Linux-only solution:

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

For Ruby 1.8, ruby.c defines VALUE rb_argv0; which contains this information, but that variable is not available in Ruby scripts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文