2

ローカル コマンドとグローバル コマンドを使用して rbenv を表面的に変更することはできますが、Ruby のバージョンは根本的に変更されません。シェル コマンドは認識されませんが、ローカルとグローバルは認識されます。以前は RVM を使用していましたが、アンインストールしました (私の知る限り)。私は何をすべきか?

$ rbenv versions
  system
* 1.9.3-p0 (set by /Users/geoffreylord/.rbenv/version)
  2.0.0-p247
$ rbenv local
rbenv: no local version configured for this directory
$ rbenv global
1.9.3-p0
$ rbenv shell
rbenv: no such command `shell'
$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
4

2 に答える 2

4

rbenvがディスク上shell commandで呼び出される理由は、その出力がユーザーの現在の対話型シェルで評価される特別なタイプのコマンドだからです。これにより、このコマンドでシェル内の環境変数を変更できるようになります。これは、単にコマンドを実行するだけでは変更できません。rbenv-sh-shellshell

コマンドが機能するために、rbenv は、すべての rbenv コマンドを正常に実行し、コマンドの出力を eval するシェル関数をrbenv-sh-*定義することによって、ちょっとしたハックを行います。したがって、実行すると次のようになります。rbenv()sh-*rbenv shell 2.0

  1. rbenv()シェル関数が呼び出されます。
  2. 関数が実行されrbenv sh-shell 2.0ます。
  3. sh-shell出力export RBENV_VERSION=2.0;
  4. rbenv()関数 eval は、現在の対話型シェルにあるものです。

このrbenv()機能はeval "$(rbenv init -)"、rbenv セットアップ プロセスの一部によってインストールされます。(あなたの、.bashrcまたは同様の init スクリプトにその行を含める必要があります。) このinitステップはオプションです (rbenv はそれがなくても機能します) が、rbenv のタブ補完を提供し、rbenv shellここで説明されている機能や他のsh-*コマンドを有効にします。存在する可能性があります (例: プラグインによって提供されるもの)。

于 2013-09-05T22:48:44.903 に答える