如何将shell设置为bash以便在Capistrano中运行?

时间:2011-10-12 23:27:10

标签: bash rvm capistrano

如何在Capistrano运行命令中设置shell以使用bash而不是sh? 我正在尝试安装RVM,我需要执行命令:

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

如:

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 1.9.2@global"
  run "gem install awesome_print map_by_method wirble bundler builder pg cheat"
  run "gem install -v2.1.2 builder"
  # modify .bashrc
end

但是我似乎无法让它发挥作用,因为Capistrano正在执行:

"sh -c 'bash < <(curl -L http://bit.ly/rvm-install-system-wide)'" on ubuntu@ec2...

我在Capistrano gem中看到command.rb文件有一些像

这样的代码
shell = "#{options[:shell] || "sh"} -c"

但我不清楚如何将options[:shell]传递给任务

4 个答案:

答案 0 :(得分:34)

set:shell不起作用,但是有效:

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

答案 1 :(得分:8)

听起来你需要rvm-capistrano宝石。另一种选择是使用rvm-capistrano使用的机制,即:

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

答案 2 :(得分:1)

尝试设置:shell变量。

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

答案 3 :(得分:0)

您还可以使用以下语法:

run "bash -c <command>"

使用--login开关设置环境特别有用,例如:

run "bash --login -c rvm use 1.9.2

......它也适用于Capistrano 3.x ......!