【发布时间】:2011-12-05 06:05:16
【问题描述】:
我正在尝试使用从同一脚本安装的 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\" )" ]
我尝试过会话,但下面的 puts 对“which rvm”给出了空白响应。
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;"]
【问题讨论】: