2010-12-01 72 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