O wait embutido do shell foi projetado para resolver exatamente esse propósito, esperar que algum processo (ou processos) termine e colete seu status de saída.
Você pode:
-
Execute
script_Aem um loop infinito ouexitse ele gerar e terminar a execução de 10 instâncias descript_B -
Com
script_A, use uma construção em loop, dentro do loop, envie oscript_Bpara background, obtenha seu PID usando$! -
Aguarde até que o processo termine em
wait PID -
Faça isso 10 vezes
-
Saia de
script_Aou continue com outra coisa
Então você pode fazer script_A como:
#!/bin/bash
for ((i=1; i<=10; i++)); do
echo "Run $i :: script_B"
/path/to/script_B &
pid=$!
wait "$pid"
done
Se você quiser continuar fazendo outra coisa, anexe-os após a construção for .
Apenas por questão de integridade, se você quiser continuar / sair com base no status de saída do último scrip_B , adicione uma breve verificação para o status de saída também:
#!/bin/bash
for ((i=1; i<=10; i++)); do
echo "Run $i :: script_B"
/path/to/script_B &
pid=$!
wait "$pid" && continue
break
done