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/

10-16 03:13