2011-10-12 13 views
15

¿Cómo puedo configurar el shell en el comando de ejecución de Capistrano para usar bash en lugar de sh? Estoy tratando de instalar RVM y necesito para ejecutar el comando:¿Cómo configuro el shell para bash para ejecutarlo en Capistrano?

run "bash < <(curl -L http://bit.ly/rvm-install-system-wide)" 

como en:

task :install_rvm, :roles => :server do 
    apps = %w(bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev  libyaml-dev sqlite3 libsqlite3-0 libxml2-dev libxslt-dev autoconf subversion libcurl4-openssl-dev) 
    apt.install({:base => apps}, :stable) 
    run "bash < <(curl -L http://bit.ly/rvm-install-system-wide)" 
    run "rvm install 1.9.2".sh 
    run "rvm use [email protected]" 
    run "gem install awesome_print map_by_method wirble bundler builder pg cheat" 
    run "gem install -v2.1.2 builder" 
    # modify .bashrc 
end 

Pero simplemente parece que no puede conseguir que funcione porque Capistrano está ejecutando:

"sh -c 'bash < <(curl -L http://bit.ly/rvm-install-system-wide)'" on [email protected] 

que veo en la gema Capistrano el archivo command.rb tiene algún código como

shell = "#{options[:shell] || "sh"} -c" 

pero no está claro para mí cómo pasar options[:shell] a la tarea

+0

Parece que está ejecutando 'bash' mediante' sh -c 'bash ...' '. ¿Cómo no cumple eso con tus requisitos? (Descargo de responsabilidad: no sé nada sobre Capistrano). –

Respuesta

1

Pruebe a establecer la variable :shell.

set :shell, '/usr/bin/bash' 
+0

Esto no parece funcionar en Capistrano, el shell solo se puede cambiar con 'default_run_options'. –

33

conjunto: Shell no está funcionando, pero que funciona:

default_run_options[:shell] = '/bin/bash'

+7

Tenga en cuenta que para rvm, es posible que necesite '/ bin/bash --login' – nateware

+0

+1, podría besarlo ... –

8

Suena como que necesita la gema rvm-capistrano. Otra opción sería utilizar el mecanismo utilizado por RVM-Capistrano, es decir:

set :default_shell, '/bin/bash -l' 
+0

genial, me ayudó mucho en el sistema de destino CentOs para la implementación – Schubie

+1

Esto funcionó bien para mí en un aprieto en Ubuntu 14.04 LTS. ¡Muchas gracias! –

0

También se puede utilizar la siguiente sintaxis:

run "bash -c <command>" 

Es especialmente útil para configurar el medio ambiente con --login cambiar, por ejemplo:

run "bash --login -c rvm use 1.9.2 

... y también funciona en Capistrano 3.x ...!

Cuestiones relacionadas