自动切换ruby版本的非交互式shell

时间:2013-03-06 22:56:30

标签: ruby-on-rails bash ubuntu rvm sh

背景

操作系统:Ubuntu 12.04
RVM版本:1.18.16(稳定) 默认ruby:ruby 1.9.3-p385(通过rvm)

确认RVM正在运行且.rvmrc是可信任的

$ bash -lc 'cd /home/client1/websites/site1; ruby -v' - client1
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-linux]

$ bash -lc 'cd /home/client1/websites/site2; ruby -v' - client1
ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02

$ bash -lc 'rvm rvmrc trusted /home/client1/websites/site2/.rvmrc'
The rvmrc at '/home/client1/websites/site2/.rvmrc' is currently trusted.

期望的效果

$ bash -c 'cd /home/client1/websites/site2; ruby -v' - client1
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-linux]

$ bash -c 'cd /home/client1/websites/site2; ruby -v' - client1
ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02

当前影响

$ bash -c 'cd /home/client1/websites/site2; ruby -v' - client1
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-linux]

$ bash -c 'cd /home/client1/websites/site2; ruby -v' - client1
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-linux]

尝试过的事情

置: [[ -s /usr/local/rvm/scripts/rvm ]] && . /usr/local/rvm/scripts/rvm 在以下文件中:

  • 〜/ .bashrc中,
  • 〜/ .profile中,
  • 〜/ .bash_profile中,
  • /etc/bash.bashrc

可以在文件的最顶部,在其他任何事情可能导致问题之前。

旁注:我已经尝试过使用.ruby-version方法,它似乎也不起作用(感谢irc上的mpapis)

1 个答案:

答案 0 :(得分:1)

一般情况下,需要以某种方式调用bash来处理各种profile / rc文件。尝试以bash -L -c "your command here"执行bash,它激活登录模式以正确解析所有必需的启动文件。

编辑:如果不需要登录shell,则必须强制交互模式自动获取~/.bashrc。这是因为-c阻止正常的交互式控制台被实例化。这可以使用bash -i -c "command"完成。