无法执行的红宝石RVM shell命令

很长一段时间的潜伏者,第一次海报!

目标

我的最终目标是使耙安装脚本设置我的RVM环境的东西(我需要动态地创建gemsets,安装宝石那些gemsets,并运行这些gemsets内Ruby脚本)。

问题

我需要设置RVM中,我在执行命令RVM外壳,其基本思想是源作为这里列出的RVM脚本。

当我尝试在Ruby中执行shell命令时,源RVM脚本的问题出现了。 它有据可查的RVM只支持bash的,但红宝石似乎没有执行shell命令时要使用bash。

我已经试过

我已经尝试了所有方法来执行此处所列无济于事shell命令。 我将使用下面的“EXEC”方法简单。

如此看来,虽然红宝石认为使用bash shell来执行这些命令的......事实并非如此。 注意!

exec 'echo $SHELL' => /bin/bash

exec 'source ~/.rvm/scripts/rvm; type rvm | head -1;' => sh: source: not found => rvm is ~/.rvm/bin/rvm

那红宝石真正使用/ bin / sh的不是/斌/ bash的告诉我(即输出应该返回rvm is a function )。 我甚至竟打印红宝石ENV的东西,和ENV [SHELL]为“/斌/ bash的'

“蛮力”解决方案

我有一个解决办法,但它真的缺憾(这将需要我“和”所有命令一起):

exec 'echo \'source ~/.rvm/scripts/rvm && type rvm | head -1\' | /bin/bash'

我想尽量避免使用shell脚本 - 这似乎是合理的,我可以在Ruby中实现这一目标。

--------------解决方案-------------

碰巧的是,RVM实际上暴露出的默认包含一个Ruby API。 添加$HOME/.rvm/lib到您的$LOAD_PATH ; 您现在可以使用require 'rvm'

据我所知,这主要是文档的源文件本身(摘要是rvm.rb )。

现在,您可以编写操作RVM,像这样的Ruby脚本:

require 'rvm'
env = RVM.current
env.gemset.create('newgemset')

等等。

调用带有-c参数的bash:

command = 'source ~/.rvm/scripts/rvm; type rvm | head -1'
exec "bash -c #{command.inspect}"

分类:红宝石 时间:2013-05-22 人气:0
本文关键词: 红宝石,外壳,RVM
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.268 (s). 9 q(s)