我需要以编程方式设置ruby版本 - >执行bundler - >和Ruby脚本中的其他命令[注意:不希望使用shell脚本执行此操作,它必须通过ruby本身]。
由于默认情况下执行ruby脚本/ irb使用' sh ',而RVM使用' bash / zsh ',我设法使用rvm&amp设置ruby版本;使用以下命令进行bash:
%x[bash -lc "rvm use #{ruby_ver}" 2>&1]
。
问题:在此之后,如果我运行任何系统命令(如bundle install),它不会在我设置ruby版本的同一个bash shell中执行,而是作为一个新shell(再次考虑'sh'),因此执行环境与所需的不同。
即使使用%x[bash -lc #{command}]
运行更多命令,它也会被视为不同的shell。
有没有办法: 将shell更改为bash以获取整个ruby脚本执行期或者将shell保留在RVM被触发的位置或者更好的方法来处理这种情况
感谢任何帮助。
答案 0 :(得分:0)
每个Ruby shellout都发生在它自己的离散shell中。你可以做一些事情,比如使用popen来生成一个bash shell,然后将命令传递给它,但是你所做的只是运行一个bash脚本。
您最好的选择是创建一个完整的bash脚本,然后使用rvm do
执行它以在您选择的RVM环境的上下文中运行它。你可以通过执行像rvm do 2.0.0 bundle install && rake
之类的东西来调用ruby,但是在一天结束时,你正在讨论运行shell命令,所以你应该用shell语法来做。
答案 1 :(得分:0)