我可以使用本地和全局命令来改变我的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]
答案 0 :(得分:4)
rbenv的shell command
在磁盘上被称为rbenv-sh-shell
的原因是因为shell
是一种特殊类型的命令,其输出将在用户的当前交互式shell中进行评估。这使得此命令可以更改shell中的环境变量,这是通过简单地执行命令无法实现的。
为了使rbenv-sh-*
命令起作用,rbenv通过定义rbenv()
shell函数来执行所有rbenv命令并且eval是sh-*
命令的输出,从而做了一点点破解。那么当你运行rbenv shell 2.0
时会发生什么:
rbenv()
调用shell函数; rbenv sh-shell 2.0
; sh-shell
输出export RBENV_VERSION=2.0
; rbenv()
函数eval是您当前的交互式shell中的。 rbenv()
函数由rbenv设置过程的eval "$(rbenv init -)"
部分安装。 (您应该在.bashrc
或类似的init脚本中包含该行。)此init
步骤是可选的(rbenv将在没有它的情况下工作)但它确实为rbenv提供了tab-completion以及enable { {1}}此处描述的功能,以及可能存在的任何其他rbenv shell
命令(例如插件提供的那些命令)。
答案 1 :(得分: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