Allo stato attuale, verranno eseguiti uno dopo l'altro, indipendentemente dal fatto che abbiano fallito o meno. Devono solo uscire ad un certo punto, quindi viene eseguito il comando successivo. Uno dopo l'altro.
Se vuoi che vengano eseguiti solo se i comandi precedenti non sono terminati con un errore, usa:
python do_this_first.py && python do_this_second.py && python do_this_last.py
Qui, le due e commerciali funzionano come un AND
logico . Il secondo script verrà eseguito solo quando il primo è terminato correttamente e il terzo solo quando il secondo è stato eseguito senza errori. Se si è verificato un errore, nessuno dei seguenti comandi verrà eseguito.
Se tuttavia desideri eseguirli in parallelo, puoi farlo, ma ci sono molte altre opzioni:
python do_this_first.py &
python do_this_second.py &
python do_this_last.py &
La bash è sequenziale. All'inizio verrà interpretato il file do_this_first.py. Dopo che Python ha finito di eseguirlo, il controllo viene nuovamente trasferito a bash. La bash a sua volta eseguirà python do_this_second.py e così via..
Quindi essenzialmente, do_this_first inizia e finisce, do_this_second inizia e finisce e poi do_this_last inizia e finisce.
Come ha detto slhck, la seguente è un'opzione.
python do_this_first.py && python do_this_second.py && python do_this_last.py
Oppure puoi impostare -e, che terminerà immediatamente se una riga restituisce un codice di errore.
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
python do_this_first.py
python do_this_second.py
python do_this_last.py
Per me quest'ultimo è più leggibile.