
Eu tenho um script bash principal que executa vários scripts bash menores (e cada script menor executa um contêiner docker). Mas quero que o segundo script seja executado somente depois que o primeiro terminar de ser executado e assim por diante. Ou seja, quero que os processos de cada script NÃO sejam executados simultaneamente. Exemplo:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
Sugestões online não estão funcionando para mim. Tentei obter o PID do 1st_script com:
1st_Script & echo $!
para então usar ps -p <PID> || <2nd_script>
Mas embora <1st_Script> & echo $!
dê um PID, quando verifico se o processo está lá ps -p <PID>
não há nada. Eu sei que 1st_script está em execução porque o contêiner docker que ele executa está listado com docker ps
. Portanto, seu processo também deve ser listado comps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
não é uma opção porque tenho muitos scripts e não é legível
Responder1
As linhas de continuação podem melhorar muito a legibilidade:
script1 && script2 && script3 && scriptn
contra
script1 \
&& script2 \
&& script3 \
&& scriptn
Mas estou tendo problemas para reproduzir seu problema. O que lhe dá a impressão de que seus scripts sãonãoexecutando sequencialmente?
Fiz dois scripts de teste que continham cada um
echo hello
sleep 15s
e então um script que continha apenas
./script1
./script2
e mediu a espera usando time
para obter a seguinte saída
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
Se os scripts fossem executados simultaneamente, o tempo total gasto seria inferior a 30 segundos.
O seu problema é que você quer orecipienteparar de executar antes de passar para o próximo script?