Невозможно изменить RVM gemset из оболочки script через `rvm gemset use`
(См. обновление внизу)
Я чувствую, что мне не хватает чего-то ужасно очевидного здесь, но я не могу изменить gemsets из оболочки script. Этот минимальный script демонстрирует:
#!/usr/bin/env bash
rvm gemset use "testing"
Я даже попробовал инструкции на странице Scripting RVM (хотя это и не показалось необходимым):
#!/usr/bin/env bash
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
# First try to load from a user install
source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
# Then try to load from a root install
source "/usr/local/rvm/scripts/rvm"
else
printf "ERROR: An RVM installation was not found.\n"
fi
rvm gemset use "testing"
По-прежнему нет.
Интересно, если я попытаюсь запустить script, не создав сначала "тест" gemset, я получаю ERROR: Gemset 'testing' does not exist, rvm gemset create 'testing' first.
Однако, если я создам gemset, а затем запустим script, я не получаю никакого вывода из script, а gemset не изменяется (согласно rvm info
). Я могу выполнять другие действия Gemset RVM, такие как создание gemset и доверяющих файлов .rvmrc
, из script.
[Обновление]
Конечно, среда меняется, о чем свидетельствует вызов rvm info
из script. Как получить эти изменения для сохранения/воздействия на вызывающую оболочку? Или, если это невозможно (как указано здесь), есть ли способ установить текущий гемсет RVM на основе входа в script?
Ответы
Ответ 1
Была такая же проблема, и здесь решение:
#!/bin/bash
# IMPORTANT: Source RVM as a function into local environment.
# Otherwise switching gemsets won't work.
[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"
# Enable shell debugging.
set -x
rvm [email protected]_a
rvm gemdir
gem env gemdir
rvm [email protected]_b
rvm gemdir
gem env gemdir
Я обнаружил, что ваша интерактивная оболочка имеет rvm()
и ее помощники, тогда как script среда не получила их. Вместо этого выполняется rvm
, частично, что приводит к некоторой путанице.
Ответ 2
Я закончил реализацию функции, которую я хотел как функцию, вместо оболочки script.
function rvmrc {
rvm gemset create $1
rvm gemset use $1
echo "rvm gemset use $1" > .rvmrc
rvm rvmrc trust
}