2

我可以用本地和全局命令从表面上改变我的 rbenv,但我的 Ruby 版本并没有从根本上改变。我的 shell 命令无法识别,但本地和全局是。我以前有 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

shell command在磁盘上调用rbenv 的原因rbenv-sh-shell是因为shell它是一种特殊类型的命令,其输出将在用户的当前交互式 shell 中进行评估。这使得该命令可以更改 shell 中的环境变量,而这通过简单地执行命令是不可能的。

为了让rbenv-sh-*命令正常工作,rbenv 通过定义rbenv()正常执行所有 rbenv 命令的 shell 函数和 eval 的sh-*命令输出来做了一点修改。所以当你运行时会发生什么rbenv shell 2.0

  1. rbenv()shell 函数被调用;
  2. 函数执行rbenv sh-shell 2.0
  3. sh-shell输出export RBENV_VERSION=2.0
  4. rbenv()函数 eval 在您当前的交互式 shell 中。

rbenv()功能由eval "$(rbenv init -)"rbenv 安装过程的一部分安装。(您应该在您的.bashrc或类似的 init 脚本中有该行。)此init步骤是可选的(rbenv 将在没有它的情况下工作)但它确实为您提供了 rbenv 的制表符完成以及启用rbenv shell此处描述的功能以及任何其他sh-*命令可能存在(例如插件提供的那些)。

于 2013-09-05T22:48:44.903 回答
0

哎呀!好像有人结巴了。

$ ls $HOME/.rbenv/libexec/*shell*
/home/tim/.rbenv/libexec/rbenv-sh-shell

看起来没有shell命令,而是一个sh-shell命令

$ rbenv sh-shell
rbenv: no shell-specific version configured

是的。让我们看看,如果我们用 rbenv-shell 链接到它

$ cd $HOME/.rbenv/libexec/
$ ln -s rbenv-sh-shell rbenv-shell

那么我们应该得到一个有效的shell命令

$ rbenv shell
rbenv: no shell-specific version configured
于 2013-09-05T21:17:27.520 回答