RVM可以做的一件事是,当您更改目录时,请注意.rvmrc
,并根据该文件的内容更改当前的Ruby版本和gemset。更改到该目录后,它将立即进行更改,并相应地输出一条消息。
它如何检测到当前工作目录中的更改?我可以想象出一种极其原始的方法:运行一个以当前用户身份运行并持续检查pwd
结果的守护程序。但我确定那不是它的作用。
另一种方法可能是别名cd
来更改目录,但也指示是否.rvmrc
并更改gemset。
是否存在用于更改目录的Unix系统挂钩,或者RVM使用了其他技巧吗?
[RVM]如何检测当前工作目录中的更改?
这完全取决于shell甚至shell版本。如建议的那样,最简单的方法是通过定义相同名称的函数来覆盖cd
。确保调用内置的cd
函数,否则会导致very令人讨厌或very令人讨厌的副作用(取决于透视图)。
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
操作之后添加函数调用。到目前为止,这是解决此任务的最佳方法。因此,如果您的外壳允许,请务必使用此方法。 RVM可以。
举个例子,您可以look at RVM's cd functionality on GitHub。
RVM利用此功能加载per-project (directory, really) .rvmrc
files,并为用户提供了配置各种挂钩的能力。您可以阅读有关.rvmrc
的更多信息。
安装RVM时,您必须添加:
RVM's hooks on the documentation website
到您的shell配置(通常为[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
或.bashrc
)。
这会在启动外壳程序时加载RVM,然后该外壳程序将覆盖您的.zshrc
命令并在移动时检查cd
。有关更多详细信息,请参见.rvmrc
的内容。