Bash 无法通过“RVM gemset use”从shell脚本更改RVM gemset`

Bash 无法通过“RVM gemset use”从shell脚本更改RVM gemset`,bash,rvm,Bash,Rvm,(参见底部的更新) 我觉得我在这里遗漏了一些非常明显的东西,但我不能在shell脚本中更改gemset。此脚本演示了: #!/usr/bin/env bash rvm gemset use "testing" 我甚至尝试了来自的说明(尽管似乎没有必要): 还是不行 有趣的是,如果我尝试在不首先创建“测试”gemset的情况下运行脚本,我会得到错误:gemset'testing'不存在,rvm gemset会首先创建'testing'。但是,如果我创建gemset然后运行脚本,我不会从脚本获

(参见底部的更新)


我觉得我在这里遗漏了一些非常明显的东西,但我不能在shell脚本中更改gemset。此脚本演示了:

#!/usr/bin/env bash

rvm gemset use "testing"
我甚至尝试了来自的说明(尽管似乎没有必要):

还是不行

有趣的是,如果我尝试在不首先创建“测试”gemset的情况下运行脚本,我会得到
错误:gemset'testing'不存在,rvm gemset会首先创建'testing'。
但是,如果我创建gemset然后运行脚本,我不会从脚本获得任何输出,gemset也不会更改(根据
rvm info
)。我能够从脚本中执行其他RVM gemset操作,例如创建gemset和信任
.rvmrc
文件

[更新]


当然,正如脚本中对
rvm info
的调用所示,环境正在发生变化。如何使这些更改保持/影响调用shell?或者,如果不可能(如图所示),是否有任何方法可以根据脚本的输入设置当前RVM gemset?

我最终实现了我想要的功能,将其作为一个函数而不是shell脚本

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

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

#!/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二进制文件被执行,部分工作,因此造成一些混乱。

您的标题显示您使用了反引号。你真的在用它们吗?你知道那意味着命令替换吗?该命令的任何输出都必须采用varName=value的形式才能有用(加上最有可能的前一个eval)。祝你好运不,我不是,我只是在标题中用它们来表示一个命令。谢谢-这为我解决了很多问题,可以用于其他事情。当你在这里展示它的时候看起来很明显,但我已经摆弄了好几个小时了!谢谢我的Jenkins/Capistrano部署简直要了我的命!我太糊涂了!干杯,谢谢!这也有助于解决切换Ruby版本(例如“rvm系统”)在脚本中不起作用的问题/bin/bash——如果您不想添加
[-s“$HOME/.rvm/scripts/rvm”]&&,那么登录
也会起作用。“$HOME/.rvm/scripts/rvm”
#!/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