RVM可以做的一件事是注意当你更改目录,寻找.rvmrc
,并根据该文件的内容更改当前的Ruby版本和gemset。一旦您更改到该目录并相应地输出消息,它就会进行此更改。
它如何检测当前工作目录中的更改?我可以想象一种非常粗暴的方法:运行以当前用户身份运行的守护程序并继续检查{{{{ 1}}。但我确信这不是它的作用。
另一种方法可能是别名pwd
来更改目录,但也检查cd
并更改gemsets(如果有指示)。
是否存在用于更改目录的Unix系统挂钩,或者是否存在RVM正在使用的其他技巧?
答案 0 :(得分:26)
[RVM]如何检测当前工作目录中的更改?
这完全取决于shell甚至shell版本。如所建议的,实现此目的的最简单方法是通过定义同名函数来覆盖cd
。请务必调用内置的cd
函数,否则会导致非常讨厌或非常有趣的副作用(取决于透视图)。
cd() {
builtin cd $*
echo "Changed directories from '${OLDPWD}' to '${PWD}'."
}
通过将其放入文本源文件并获取文件,您可以将此自定义cd
功能加载到源文件的会话中。
wayneeseguin$ cd /tmp
Changed directories from '/home/wayneeseguin' to '/tmp'.
如果您希望此功能始终对用户帐户中的交互式shell有效,请将功能定义放入~/.bash_profile
。或者,您可以从~/.bash_profile
获取存储函数的文本文件。您可以在Bash手册中read more about Bash startup files。
The Ruby enVironment Manager (RVM)主要针对Bash shell编写并定位。 RVM将在ZSH shell中工作,允许您在cd
操作后添加函数调用。到目前为止,这是解决此任务的最佳方法。因此,如果您的shell允许它,请务必使用此方法。 RVM可以。
有关广泛的示例,您可以look at RVM's cd functionality on GitHub。
RVM利用此功能加载per-project (directory, really) .rvmrc
files,并为用户提供配置各种挂钩的功能。您可以阅读有关RVM's hooks on the documentation website的更多信息。
答案 1 :(得分:4)
安装rvm时,必须添加:
[[-s $ HOME / .rvm / scripts / rvm]]&& 来源$ HOME / .rvm / scripts / rvm
到你的shell配置(通常为.bashrc
或.zshrc
)。
当你启动一个shell然后覆盖你的cd
命令并在你移动时检查.rvmrc
时,它会加载RVM。有关详细信息,请参阅$HOME/.rvm/scripts/cd
的内容。
答案 2 :(得分:0)
只要需要解析gemset的内容,它是否只查看当前目录?有没有什么能让你认为它与改变目录同时进行,而不是按需求?