无法通过`rvm gemset use`从shell脚本更改RVM gemset

时间:2011-04-26 15:32:35

标签: bash rvm

(见底部更新)


我觉得我在这里遗漏了一些非常明显的东西,但是我无法在shell脚本中更改gemsets。这个最小的脚本演示了:

#!/usr/bin/env bash

rvm gemset use "testing"

我甚至尝试过Scripting RVM page的指示(尽管似乎没有必要):

#!/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"

仍然没有。

有趣的是,如果我尝试在没有首先创建“testing”gemset的情况下运行脚本,我得到ERROR: Gemset 'testing' does not exist, rvm gemset create 'testing' first.但是,如果我创建gemset然后运行脚本,我得不到脚本的输出gemset不会更改(根据rvm info)。我能够在脚本中执行其他 RVM gemset操作,例如创建gemsets和信任.rvmrc文件。

[更新]

当然,环境正在更改,如脚本中对rvm info的调用所示。如何让这些更改持久/影响调用shell?或者,如果那不可能(如here所示),有没有办法根据脚本的输入设置当前的RVM gemset?

2 个答案:

答案 0 :(得分:20)

有完全相同的问题,这是解决方案:

#!/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 1.9.2@gemset_a
rvm gemdir
gem env gemdir

rvm 1.9.2@gemset_b
rvm gemdir
gem env gemdir

我发现你的交互式shell有rvm()及其助手,而脚本的环境没有得到它们。 rvm二进制文件被执行,部分工作,从而导致一些混淆。

答案 1 :(得分:1)

我最终实现了我想要的功能而不是shell脚本。

function rvmrc {
  rvm gemset create $1
  rvm gemset use $1
  echo "rvm gemset use $1" > .rvmrc
  rvm rvmrc trust
}