RVM可以做的一件事是,当您更改目录时,请注意.rvmrc
,并根据该文件的内容更改当前的Ruby版本和gemset。更改到该目录后,它将立即进行更改,并相应地输出一条消息。
如何检测当前工作目录中的更改? 我可以想象有一种非常原始的方法:运行一个守护程序,该守护程序以当前用户的身份运行,并不断检查pwd
的结果。但是我敢肯定那不是它的作用。
另一种方法可能是给cd
加上别名以更改目录,但也可以检查.rvmrc
并根据指示更改gemset。
是否存在用于更改目录的Unix系统挂钩,或者RVM使用了其他技巧?
最佳答案
这完全取决于shell甚至shell版本。如建议的那样,最简单的方法是通过定义相同名称的函数来覆盖cd
。确保调用内置的cd
函数,否则会导致非常讨厌或非常有趣的副作用(取决于透 View )。
cd() {
builtin cd $*
echo "Changed directories from '${OLDPWD}' to '${PWD}'."
}
通过将其放置在文本源文件中并获取文件,您可以将此自定义
cd
功能加载到 session 中获取文件的 session 中。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编写的,并且主要针对ZSH shell。 RVM将在look at RVM's cd functionality on GitHub中工作,它允许您在
cd
操作之后添加函数调用。到目前为止,这是解决此任务的最佳方法。因此,如果您的 shell 允许,请务必使用此方法。 RVM可以。对于广泛的示例,您可以per-project (directory, really)
.rvmrc
files。RVM利用此功能来加载RVM's hooks on the documentation website,并为用户提供配置各种挂钩的能力。您可以阅读有关ojit_a的更多信息。
关于rvm - RVM如何检测更改目录的时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5605277/