RVM如何在更改目录后检测?

问题描述 投票:24回答:2

RVM可以做的一件事是,当您更改目录时,请注意.rvmrc,并根据该文件的内容更改当前的Ruby版本和gemset。更改到该目录后,它将立即进行更改,并相应地输出一条消息。

它如何检测到当前工作目录中的更改?我可以想象出一种极其原始的方法:运行一个以当前用户身份运行并持续检查pwd结果的守护程序。但我确定那不是它的作用。

另一种方法可能是别名cd来更改目录,但也指示是否.rvmrc并更改gemset。

是否存在用于更改目录的Unix系统挂钩,或者RVM使用了其他技巧吗?

rvm internals
2个回答
26
投票

[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的更多信息。


4
投票

安装RVM时,您必须添加:

RVM's hooks on the documentation website

到您的shell配置(通常为[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm .bashrc)。

这会在启动外壳程序时加载RVM,然后该外壳程序将覆盖您的.zshrc命令并在移动时检查cd。有关更多详细信息,请参见.rvmrc的内容。

© www.soinside.com 2019 - 2024. All rights reserved.