rvm internals

¿Cómo detecta RVM cuando ha cambiado de directorio?



internals (3)

¿Cómo detecta [RVM] un cambio en el directorio de trabajo actual?

Esto depende totalmente de la versión shell e incluso shell. El método más simple para lograr esto es, como se sugirió, anular cd al definir una función del mismo nombre. Asegúrese de llamar a la función de cd incorporada o provocará efectos secundarios muy desagradables o muy divertidos (según la perspectiva).

cd() { builtin cd $* echo "Changed directories from ''${OLDPWD}'' to ''${PWD}''." }

Al colocar esto en un archivo de origen de texto y obtener el archivo, puede cargar esta funcionalidad de cd personalizada en la sesión que proporciona el archivo.

wayneeseguin$ cd /tmp Changed directories from ''/home/wayneeseguin'' to ''/tmp''.

Si desea que esto esté siempre vigente para shells interactivos en su cuenta de usuario, coloque la definición de función en ~/.bash_profile . Alternativamente, puede obtener el archivo de texto en el que almacenó la función desde ~/.bash_profile . Puedes leer más sobre los archivos de inicio de Bash en el manual de Bash.

Ruby enVironment Manager (RVM) está escrito y dirigido principalmente para el shell Bash . RVM funcionará en el shell ZSH, que le permite agregar llamadas a funciones después de una acción de cd . Esta es, con mucho, la mejor manera de abordar la resolución de esta tarea. Entonces, si su shell lo permite, por todos los medios use este método. RVM hace.

Para ver un ejemplo extenso, puede ver la funcionalidad de CD de RVM en GitHub .

RVM utiliza esta funcionalidad para cargar archivos por directorio (en realidad,) .rvmrc , así como para proporcionar a los usuarios la capacidad de configurar varios enlaces. Puede leer más sobre los ganchos de RVM en el sitio web de documentación .

Una cosa que puede hacer RVM es notar cuando .rvmrc directorio, busca un .rvmrc y cambia tu versión actual de Ruby y gemset de acuerdo con el contenido de ese archivo. Realiza este cambio tan pronto como usted ingresa a ese directorio y emite un mensaje en consecuencia.

¿Cómo detecta un cambio en el directorio de trabajo actual? Puedo imaginar una forma extremadamente cruda de hacer esto: ejecutar un demonio que se ejecute como el usuario actual y que verifique los resultados de pwd . Pero estoy seguro de que no es lo que hace.

Otro enfoque podría ser alias cd para cambiar directorios, pero también buscar un .rvmrc y cambiar gemsets si así se indica.

¿Hay un gancho del sistema Unix para cambiar directorios, o hay algún otro truco que está usando RVM?


¿Solo mira el directorio actual cada vez que necesita resolver el contenido del gemset? ¿Hay algo que te hace pensar que está haciendo esto en paralelo con los directorios cambiantes, en lugar de hacerlo a pedido?


Cuando instalas rvm tienes que añadir:

[[-s $ HOME / .rvm / scripts / rvm]] && source $ HOME / .rvm / scripts / rvm

a su configuración de shell (normalmente .bashrc o .zshrc ).

Esto carga RVM cuando inicia un shell que luego invalida su comando de cd y comprueba si hay .rvmrc a medida que se desplaza. Consulte el contenido de $HOME/.rvm/scripts/cd para obtener más detalles.