如何将 shell 设置为 bash 以在 Capistrano 中运行?
Posted
技术标签:
【中文标题】如何将 shell 设置为 bash 以在 Capistrano 中运行?【英文标题】:How do I set the shell to bash for run in 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 一无所知。)
【参考方案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...!
【讨论】:
以上是关于如何将 shell 设置为 bash 以在 Capistrano 中运行?的主要内容,如果未能解决你的问题,请参考以下文章
如何在记事本++ 6.5.5 上将 unix/bash 设置为默认语言
如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?