2010-05-11 71 views
13

在ruby腳本中,我如何獲得Ruby解釋器的路徑?如何找到ruby解釋器?

示例腳本:

#!/path/to/ruby 
    puts `#{RUBY_INTERPRETER_PATH} -e "puts 'hi'"` 
    #EOF 

哪裏RUBY_INTERPRETER_PATH是找到/path/to/ruby的神話的方式。

雖然這只是一個例子。我知道在這種情況下,我可以將/path/to/ruby複製到腳本中,但我不想那樣做。無論#!行是什麼意思,我都希望它能夠「正確地」工作。即使在windows下運行。

Ciao!

回答

13

這些天來(1.9+),你可以使用內置的方法(假設使用JRuby等工作)是這樣的:

RbConfig.ruby 或 Gem.ruby

$ irb --simple-prompt 
>> RbConfig.ruby 
=> "C:/installs/Ruby193/bin/ruby.exe" 
>> Gem.ruby 
=> "C:/installs/Ruby193/bin/ruby.exe" 
+0

我可以確認它適用於jruby:'ruby -e'將RbConfig.ruby'=>/usr/local/var/rbenv/versions/jruby-1.7.4/bin/jruby' – 2013-07-20 21:05:35

+1

即使在1.8版本上,要求「rubygems」;看跌期權(Gem.ruby())'。如果有人在其他地方安裝了這樣的二進制文件,它會保證正確,per @ user945466?在Linux上,你可以用'puts(File.readlink(「/ proc/self/exe」))''來得到一個有保證的答案。 – 2017-08-25 18:05:09

15

要獲得當前正在運行的Ruby解釋器的路徑:

require 'rbconfig' 
RUBY_INTERPRETER_PATH = File.join(RbConfig::CONFIG["bindir"], 
            RbConfig::CONFIG["RUBY_INSTALL_NAME"] + 
            RbConfig::CONFIG["EXEEXT"]) 
+2

來源:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/151376 – ryeguy 2010-05-11 20:12:25

+1

我一直忘記'rbconfig';這非常有用。 – 2011-08-11 23:30:57

+1

儘管使用'rbconfig'的答案對於找到已安裝的Ruby解釋器的路徑非常有用,但它並不能保證該過程實際上是該解釋器正在運行的一個實例。它可能是駐留在系統其他地方的完全不同的可執行文件。 – 2011-09-14 20:20:23