Подтвердить что ты не робот

Как RVM обнаруживает, когда вы меняли каталоги?

Одна вещь, которую может сделать RVM, - это заметить, когда вы изменили каталоги, найдите .rvmrc и измените текущую версию Ruby и gemset в соответствии с этим содержимым файла. Он вносит это изменение, как только вы переходите на этот каталог и выдает соответствующее сообщение.

Как он обнаруживает изменение в текущем рабочем каталоге? Я могу представить себе чрезвычайно грубый способ сделать это: запустите демон, который работает как текущий пользователь, и продолжает проверять результаты pwd. Но я уверен, что не то, что он делает.

Другим подходом может быть псевдоним cd для изменения каталогов, но также проверить наличие .rvmrc и изменить gemset, если это указано.

Есть ли системный крючок Unix для изменения каталогов или есть какой-то другой трюк, который использует RVM?

4b9b3361

Ответ 1

Как [RVM] обнаруживает изменение в текущем рабочем каталоге?

Это полностью зависит от версии оболочки и даже оболочки. Самый простой способ для этого - это, как было предложено, переопределить cd путем определения функции с тем же именем. Обязательно вызовите встроенную функцию cd или вы вызовете очень неприятные или очень забавные побочные эффекты (в зависимости от перспективы).

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

Поместив это в текстовый исходный файл и выберем файл, вы можете загрузить эту настраиваемую функциональность cd в файл sourcing.

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

Если вы хотите, чтобы это всегда действовало для интерактивных оболочек в вашей учетной записи пользователя, поместите определение функции в ~/.bash_profile. В качестве альтернативы вы можете указать текстовый файл, в котором вы сохранили функцию, от ~/.bash_profile. Вы можете узнать больше о Bash файлах запуска в руководстве Bash.

Ruby enVironment Manager (RVM) написан и предназначен главным образом для оболочки Bash, RVM будет работать в оболочке ZSH, которая позволяет добавлять вызовы функций после действия cd. Это, безусловно, лучший способ подходить к решению этой задачи. Таким образом, если ваша оболочка разрешает это, обязательно используйте этот метод. RVM делает.

В обширном примере вы можете посмотреть функциональность RVM cd на GitHub.

RVM использует эту функциональность для загрузки за проект (каталог, действительно) .rvmrc файлов, а также предоставляет пользователям возможность настраивать различные крючки. Подробнее о RVM можно найти на веб-сайте документации.

Ответ 2

Когда вы устанавливаете rvm, вы должны добавить:

[[-s $HOME/.rvm/scripts/rvm]] && & && & источник $HOME/.rvm/scripts/rvm

в конфигурацию вашей оболочки (обычно .bashrc или .zshrc).

Это загружает RVM при запуске оболочки, которая затем переопределяет команду cd и проверяет на .rvmrc при перемещении. Подробнее см. Содержимое $HOME/.rvm/scripts/cd.

Ответ 3

Он просто смотрит на текущий каталог всякий раз, когда ему нужно разрешить содержимое gemset? Есть ли что-то, что заставляет вас думать, что это делает это параллельно с изменением каталогов, а не по требованию?