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_A
em um loop infinito ouexit
se 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_B
para background, obtenha seu PID usando$!
-
Aguarde até que o processo termine em
wait PID
-
Faça isso 10 vezes
-
Saia de
script_A
ou 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