【发布时间】:2011-08-02 01:39:25
【问题描述】:
潜伏已久,第一次发帖!
目标
我的最终目标是制作一个 Rake 设置脚本来设置我的 rvm 环境内容(我需要动态创建 gemset,将 gem 安装到这些 gemset,并在这些 gemset 中运行 ruby 脚本)。
问题
我需要在我正在执行 rvm 命令的 shell 中设置 rvm。基本思想是获取 rvm 脚本as outlined here。
当我在 ruby 中执行 shell 命令时尝试获取 rvm 脚本时出现问题。有据可查的是 rvm 只支持 bash,但 ruby 在执行 shell 命令时似乎没有使用 bash。
我的尝试
我尝试了所有方法来执行here 列出的 shell 命令,但无济于事。为简单起见,我将使用下面的 'exec' 方法。
似乎虽然 ruby 认为它使用 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
这告诉我 ruby 真正使用的是 /bin/sh 而不是 /bin/bash(该输出应该返回 rvm is a function)。我什至打印了 ruby env 的东西,而 ENV[SHELL] 是 '/bin/bash'
“蛮力”解决方案
我确实有一个解决方法,但它确实很笨拙(这需要我将所有命令“与”在一起):
exec 'echo \'source ~/.rvm/scripts/rvm && type rvm | head -1\' | /bin/bash'
如果可能的话,我想避免使用 shell 脚本——我可以在 ruby 中完成这似乎是合理的。
【问题讨论】: