2011-10-12 28 views
15

如何在Capistrano運行命令中設置shell以使用bash而不是sh? 我試圖安裝RVM,我需要執行命令:在如何將shell設置爲在Capistrano運行的bash?

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 [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 

但我似乎無法得到它,因爲Capistrano的是執行工作:

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

我在Capistrano的寶石看到command.rb文件有像

一些代碼

但我不清楚如何通過options[:shell]的任務

+0

它看起來像通過'sh -c'bash執行'bash''''。這不符合你的要求? (免責聲明:我對Capistrano一無所知。) –

回答

1

嘗試將:shell變量。

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

這似乎在Capistrano中不起作用,shell只能使用'default_run_options'進行更改。 –

33

集:外殼不工作,但工作原理:

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

+7

請注意,對於rvm,您可能需要'/ bin/bash --login' – nateware

+0

+1,我可以吻你... –

8

這聽起來像你需要的rvm-capistrano寶石。另一種選擇是使用由RVM-Capistrano酒店使用的機制,那就是:

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

很棒,幫助我在CentOs目標系統上進行部署 – Schubie

+1

這對我來說很好用在Ubuntu 14.04 LTS上。非常感謝! –

0

您還可以使用以下語法:

run "bash -c <command>" 

它是用--login設置環境特別有用開關,例如:

run "bash --login -c rvm use 1.9.2 

...它也適用於Capistrano 3.x ...!

相關問題