Por que você está tentando reinventar a roda? Basta usar o Capistrano para implantar o código do seu projeto. Ele foi projetado exatamente para essa finalidade e executa as implementações em paralelo em todas as máquinas configuradas.
Meu Bash-Foo não é strong. Agora eu tenho algo parecido com
function update_project {
for i in server-{1,2,3,4} ; do
echo "Updating $i"
ssh $i "git pull"
done
}
O número de servidores está crescendo a cada dia e, como cada atualização leva cerca de 20 segundos, eu gostaria de fazer as solicitações simultaneamente. Qual é a melhor maneira de fazer isso, enquanto ainda pode ver a saída (por exemplo, fusões com falhas)?
Por que você está tentando reinventar a roda? Basta usar o Capistrano para implantar o código do seu projeto. Ele foi projetado exatamente para essa finalidade e executa as implementações em paralelo em todas as máquinas configuradas.
func lhe permitirá enviar um comando para um número arbitrário de máquinas e permitir que você assista a saída.
Existem vários projetos ssh paralelos. Procure por pssh.
Uma das outras respostas é a coisa certa a fazer, mas para responder diretamente à sua pergunta, basta adicionar um e comercial ao final do seu comando:
ssh $i "git pull" &
Se você tem o link do GNU Paralelo instalado, você pode fazer isso:
parallel --slf hostfile --nonall --tag git pull
Você pode instalar o GNU Parallel simplesmente por:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Assista aos vídeos de introdução do GNU Parallel para saber mais: link
Tags ssh bash concurrency