Почему команда "rvm use" требует / предлагает оболочку входа? - PullRequest
0 голосов
/ 17 апреля 2020

При установке по умолчанию RVM и из оболочки без регистрации выполнение rvm use приводит к:

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.

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

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

И предыдущее можно даже подтвердить как ожидаемое поведение от https://rvm.io/support/faq#shell_login:

RVM по умолчанию добавляет себя в настоящее время это файл ~ / .bash_profile, и рекомендуемый способ - включить оболочку входа в gnome-терминал (и экран).

Но почему установщик RVM просто не добавляет предыдущую строку в такие файлы, как ~/.bashrc, поэтому команды, такие как rvm use, работают как для входа в систему, так и для входа в систему без входа в систему?.

Подобные вопросы без правильного / официального ответа:

1 Ответ

0 голосов
/ 18 апреля 2020

Основная причина здесь в том, что rvm должен быть определен как функция вашей оболочки, а не как rvm-use скрипт.

Если он определен как скрипт, rvm-use будет работать в отдельном подпроцессе и имел доступ только к копии вашей оболочки, а не к исходному окну. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * *} Поэтому вам необходим полный доступ к вашей среде оболочки - следовательно, необходимо использовать полный доступ к среде оболочки PATH (чтобы вставить правильную версию rvm ruby). нужно где-то загрузить эту функцию - она ​​(скорее всего, не полностью проверила) выполняется через /etc/profile, который загружает файл /etc/profile.d/rvm.sh. Этот файл должен быть получен вручную или загружен автоматически при открытии терминала в качестве оболочки входа в систему.

Теперь, почему rvm нуждается в изменении среды локального терминала вместо использования единого глобального состояния? Это позволяет нам иметь несколько открытых терминалов с различными активными версиями ruby одновременно.

...