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

Невозможно изменить 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?

4b9b3361

Ответ 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
}