【问题标题】:How do I set the shell to bash for run in Capistrano?如何将 shell 设置为 bash 以在 Capistrano 中运行?
【发布时间】:2011-12-06 13:26:19
【问题描述】:

如何在 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] 传递给任务

【问题讨论】:

  • 看起来它正在通过sh -c bash 执行bash ...``。怎么不符合你的要求? (免责声明:我对 Capistrano 一无所知。)

标签: bash rvm capistrano


【解决方案1】:

尝试设置:shell 变量。

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

【讨论】:

  • 这似乎在 Capistrano 中不起作用,只能使用 default_run_options 更改 shell。
【解决方案2】:

set :shell 不工作,但有效:

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

【讨论】:

  • 请注意,对于 rvm,您可能需要 /bin/bash --login
【解决方案3】:

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

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

【讨论】:

  • 太棒了,在 CentOs 目标系统上帮助了我很多部署
  • 这对我在 Ubuntu 14.04 LTS 上的绑定很有效。非常感谢!
【解决方案4】:

您还可以使用以下语法:

run "bash -c <command>"

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

run "bash --login -c rvm use 1.9.2

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

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2014-06-08
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多