2

重複の可能性:
Ruby インタープリターを見つけるにはどうすればよいですか?

Ruby で現在実行中の Ruby 1.8 インタープリター名 (例: /usr/bin/ruby)、つまりC関数にargv[0]渡されるものを取得するにはどうすればよいですか。はスクリプト ファイルの名前なので、main()私は興味がありません。それはRubyがインストールされたときにいっぱいだったので、私も興味がありません.しかし、私はそれがどこで実行されているかに興味があります.$0.rbConfig::CONFIGnow

/usr/bin/rubyが へのシンボリックリンクであるとしましょう/usr/bin/ruby1.8/usr/bin/ruby1.8 myscript.rbRuby スクリプトがまたはとして開始されたかどうかを知るにはどうすればよい/usr/bin/ruby myscript.rbですか?

4

3 に答える 3

1

ルビーインタプリタを見つけるにはどうすればよいですか?を参照してください。

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
于 2010-12-01T15:10:12.557 に答える
0

Linux のみのソリューションは次のとおりです。

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

Ruby 1.8 の場合、この情報を含むも​​のをruby.c定義VALUE rb_argv0;しますが、その変数は Ruby スクリプトでは使用できません。

于 2010-12-06T09:35:46.477 に答える
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]"
于 2010-12-01T15:43:27.077 に答える