【问题标题】:can't access rvm from ruby script after install, trouble with source .bashrc安装后无法从 ruby​​ 脚本访问 rvm,源 .bashrc 有问题
【发布时间】: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;"]

【问题讨论】:

    标签: ruby bash rvm


    【解决方案1】:

    我相信您需要将-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 > 
    

    【讨论】:

    • 伊恩 - 感谢您的回答。你的建议是有道理的,但我仍然无法让它发挥作用。我已经尝试过 %x[bash -c -l "bash /bin/bash -c -l '. /root/.bashrc' 以及其他一些。您能否发布一些您尝试过的代码,这些代码从 ruby​​ 脚本中执行 source .bashrc 并且可以工作?
    • 伊恩 - 非常感谢,太棒了!看来,对于所有后续的 shell 命令,如果他们想查看新环境,则需要使用 bash -ic 以及我在帖子中进行的更新来运行它们。但这一切都有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多