не могу получить доступ к rvm из сценария ruby ​​после установки, проблема с исходным кодом .bashrc - PullRequest
1 голос
/ 05 декабря 2011

Я пытаюсь установить ruby ​​1.9.2 из сценария ruby, используя rvm, который устанавливается из этого же сценария.У меня проблема с поиском .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\" )"   ]

Я пробовал сеансы, но приведенные ниже команды дают пустой ответ на "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

AmЯ смотрю на это все неправильно?Возможно ли попытаться получить исходный код .bashrc в сценарии ruby ​​и использовать полученную среду для выполнения последующих команд?

Обновление -

Используя приведенный ниже подход Яна с bash -ic, я смог заставить работать скрипт ruby.Но все последующие команды оболочки, которые должны видеть новую среду, также должны запускаться с помощью 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 Ответ

2 голосов
/ 05 декабря 2011

Полагаю, вам нужно передать флаг -l вызову bash из ruby, что заставит встроенную оболочку bash действовать как оболочку входа в систему и прочитать .bashrc и .bash_profile. См. Также руководство по эксплуатации для получения более подробной информации.

Обновление

Извините, я имел в виду флаг -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 > 
...