安装后无法从ruby脚本访问rvm,使用源.bashrc时出现问题

时间:2011-12-05 06:05:16

标签: ruby bash rvm

我正在尝试使用从同一脚本安装的rvm从ruby脚本安装ruby 1.9.2。我遇到的问题是在脚本中获取.bashrc,以便在脚本中提供rvm的路径。以下作品:

#!/usr/bin/env ruby

%x[bash -c "bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)" ]
%x[ln -s /usr/local/rvm/ .rvm]
%x[echo "[[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\""  >> ~/.bashrc]

但是我无法在这个ruby脚本中执行

 source .bashrc

我已经尝试了

  %x[bash -c "bash <(. .bashrc)"]

我还尝试单独运行脚本添加到.bashrc

的行
 %x[ bash -c "bash <(source  \"$HOME/.rvm/scripts/rvm\" )"   ]

我已经尝试了会话,但是下面的下面给出了一个空白的响应&#34;其中rvm&#34;。

 require 'rubygems'
 require 'session'
 bash = Session::Bash.new
 stdout, stderr = bash.execute 'source .bashrc'
 puts "which rvm = " + %x[which rvm 2>&1].inspect

我看这一切都错了吗?是否尝试在ruby脚本中使用.bashrc并使用生成的环境来执行后续命令?

更新 -

使用以下Ian的方法与bash -ic我能够使ruby脚本正常工作。但是,所有需要查看新环境的后续shell命令也必须使用bash -ic运行。这是工作脚本:

 #!/usr/bin/env ruby
 %x[bash -c "bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)" ]
 %x[ln -s /usr/local/rvm/ .rvm]
 %x[echo "[[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\""  >> ~/.bashrc]
 %x[bash -ic "bash <(. ~/.bashrc); rvm install ruby-1.9.2-p290; rvm 1.9.2-p290 --default;"]

1 个答案:

答案 0 :(得分:2)

我相信你需要将-l标志传递给ruby调用bash,这将使嵌入式bash shell充当登录shell并阅读.bashrc.bash_profile。有关详细信息,另请参阅ref manual

<强>更新

抱歉,我的意思是-i标志,而不是-l。我试过这个:

[~/temp/rubytest] 
ian@ian-desktop2 $ echo "export FOO=fubar" >> ~/.bashrc
[~/temp/rubytest] 
ian@ian-desktop2 $ irb
jruby-1.6.5 :001 > %x[ bash -c "env | grep FOO" ]
 => "" 
jruby-1.6.5 :003 > %x[ bash -ic "env | grep FOO" ]
 => "FOO=fubar\n" 
jruby-1.6.5 :004 > %x[ bash -ic "echo 'export FOO2=fubar2' >> ~/.bashrc ; env | grep FOO" ]
 => "FOO=fubar\n" 
jruby-1.6.5 :005 > %x[ bash -ic "echo 'export FOO2=fubar2' >> ~/.bashrc ; source /home/ian/.bashrc ; env | grep FOO" ]
 => "FOO=fubar\nFOO2=fubar2\n" 
jruby-1.6.5 :006 >