我正在尝试使用从同一脚本安装的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;"]
答案 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 >