2010-12-01 11 views
2

可能性の重複:私はC main()に渡さargv[0]すなわち、ルビー(例えば/usr/bin/ruby)で現在実行中のRuby 1.8のインタプリタ名を取得するにはどうすればよい
How do I find the ruby interpreter?Rubyインタプリタ名

関数。私は$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として開始されているかどうかを知るにはどうすればよいですか?あなたはRubyの具体的な情報が必要な場合

答えて

0

は、Linuxのみのソリューションですその変数は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"]) 

を参照してくださいinjektの答え@RUBY_*定数

>> RUBY_ 
RUBY_COPYRIGHT  RUBY_ENGINE  RUBY_PLATFORM  RUBY_REVISION 
RUBY_DESCRIPTION RUBY_PATCHLEVEL RUBY_RELEASE_DATE RUBY_VERSION 
+0

私はインタプリタがインストールされたときにどこにコピーされたのか興味がないので、これは私の質問に対する良い答えではありません(これは私が 'CONFIG :: Config'から得ることができます)私はインタプリタが現在どこにあるのか興味があります(つまり、 'main'関数の 'argv [0]')。私が興味を持っているのは 'Config :: CONFIG'ではありません。 – pts

0

をチェックアウトインタプリタへのパスを持っています。

ここで設定に関する詳細を見つける方法は次のとおりです。

コンパイル時にRubyの設定情報がrbconfig.rbに保存されるため、インストールの詳細がわかります。この情報は、インタプリタが起動するときに、我々は値で取得することができ、オブジェクトに引き込まれる:

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

ルビー1.8、ruby.cのためにこれを含むVALUE rb_argv0;を定義します。ここでは

>> 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

+0

私が言ったように、 "@ injektの答えは通訳者への道を持っています。"私はそれを拡張して有用な他の情報を示しています。 –

関連する問題