【问题标题】:Cannot change RVM gemset from shell script via `rvm gemset use`无法通过“rvm gemset use”从 shell 脚本更改 RVM gemset
【发布时间】:2011-04-26 15:32:34
【问题描述】:

(见底部更新)


我觉得我在这里遗漏了一些非常明显的东西,但我无法从 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?

【问题讨论】:

  • 您的标题显示您使用反引号。你真的在使用它们吗?你知道这意味着命令替换吗?该命令的任何输出都必须采用 varName=value 的形式才能有用(加上很可能是前面的 eval)。祝你好运!
  • 不,我不是,我只是在标题中使用它们来表示命令。

标签: bash rvm


【解决方案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 1.9.2@gemset_a
rvm gemdir
gem env gemdir

rvm 1.9.2@gemset_b
rvm gemdir
gem env gemdir

我发现你的交互式 shell 有 rvm() 及其助手,而脚本环境没有得到它们。而是执行rvm 二进制文件,部分工作,因此造成一些混乱。

【讨论】:

  • 谢谢!我的 Jenkins/Capistrano 部署让我丧命!我很困惑!干杯。
  • 谢谢!这也有助于解决切换 Ruby 版本(例如“rvm 系统”)在脚本中不起作用的问题。
  • 如果您不想添加[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"#!/bin/bash --login 也可以解决问题
【解决方案2】:

我最终将我想要的功能实现为函数而不是 shell 脚本。

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

【讨论】:

  • 谢谢 - 这为我解决了很多问题,并且可以与其他东西一起使用。当你在这里展示它时似乎很明显,但我已经摆弄了几个小时!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多