Nada neste script deve impedir a execução do próximo comando ou retornar ao prompt do shell. O que poderia estar dando a impressão de que o prompt se foi é a saída dos scripts remotos, que chegariam após o retorno ao shell. Para evitar que você possa redirecionar o stdout / stderr para algum arquivo de log.
Como os comandos remotos são executados em segundo plano, o script original será concluído antes que os scripts allocate
tenham terminado a execução: o próximo comando não pode presumir que a inicialização foi concluída. Para iniciar todas as inicializações em paralelo e esperar que todas terminem, você pode fazer o seguinte:
#!/bin/sh
while read host
do
ssh "$host" "/home/user/allocate.sh" &
done < ~/cluster
wait
E então deve ser possível:
./initialize-cluster.sh && ./execute-something-else.sh
A chave aqui é o comando wait
, que aguarda a conclusão dos processos filhos.