2010-12-01 70 views
2

可能重复:
How do I find the ruby interpreter?Ruby解释器的名字

如何获得在Ruby中(如/usr/bin/ruby)当前正在运行的Ruby 1.8的解释名字,即传递给C main()argv[0]功能。我对$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

这里是一个Linux的唯一的解决办法:

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

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

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_COPYRIGHT  RUBY_ENGINE  RUBY_PLATFORM  RUBY_REVISION 
RUBY_DESCRIPTION RUBY_PATCHLEVEL RUBY_RELEASE_DATE RUBY_VERSION 
+0

谢谢你试图提供帮助,但这不是我的问题的好答案,因为我对安装时解释器的复制位置不感兴趣(这就是我可以从CONFIG :: Config获得的东西) ,但我对解释器当前的位置感兴趣(即C`main`函数的`argv [0]`)。我感兴趣的不是`Config :: CONFIG`。 – pts 2010-12-05 17:28:34

0

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

感谢您提供有关Ruby的有趣信息,但是您写的内容并未回答我的问题。 – pts 2010-12-05 17:30:02