如何在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
启动的?
答案 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脚本中不可用。