Em algum momento, algo precisa esperar pela execução de comandos.
No entanto, se você pudesse colocar seus comandos dentro de algumas funções, você pode agendá-los para fazer o que você precisa:
some_command(){
sleep 3
echo "I am done $SECONDS"
}
other_commands(){
# A list of all the other commands that need to be executed
sleep 5
echo "I have finished my tasks $SECONDS"
}
some_command & # First command as background job.
SECONDS=0 # Count from here the seconds.
bg_pid=$! # store the background job pid.
echo "one $!" # Print that number.
other_commands & # Start other commands immediately.
wait $bg_pid && echo "Foo $SECONDS" # Waits for some_command to finish.
wait # Wait for all other background jobs.
echo "end of it all $SECONDS" # all background jobs have ended.
Se os tempos de espera forem os mostrados no código 3 e 5, some_command terminará antes do restante dos trabalhos e isso será impresso na execução:
one 760
I am done 3
Foo 3
I have finished my tasks 5
end of it all 5
Se os tempos de sono forem (por exemplo) 8 e 5, isso será impresso:
one 766
I have finished my tasks 5
I am done 8
Foo 8
end of it all 8
Anote o pedido. Além disso, o fato de cada parte ter terminado assim que era possível (o valor de $SECONDS
impresso).