(请参阅底部的更新)

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

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

还是不走。

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

[更新]

当然,环境正在发生变化,如脚本中对rvm info的调用所示。我如何获得这些更改以保留/影响调用shell?或者,如果不可能(如here所示),有没有办法根据脚本的输入来设置当前的RVM gemset?

最佳答案

遇到了完全相同的问题,这是解决方案:

#!/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二进制文件,部分工作,因此引起一些困惑。

10-07 22:28