Dans l'état actuel des choses, ils seront exécutés les uns après les autres, qu'ils aient échoué ou non. Ils n'ont qu'à quitter à un moment donné, puis la commande suivante est exécutée. L'un après l'autre.
Si vous voulez qu'elles soient exécutées uniquement si les commandes précédentes ne se sont pas terminées avec une erreur, utilisez :
python do_this_first.py && python do_this_second.py && python do_this_last.py
Ici, les deux esperluettes fonctionnent comme un AND
logique . Le deuxième script ne s'exécutera que lorsque le premier s'est terminé proprement, et le troisième uniquement lorsque le second s'est exécuté sans erreur. En cas d'erreur, aucune des commandes suivantes ne s'exécutera.
Si vous souhaitez toutefois les exécuter en parallèle, vous pouvez le faire, mais il existe de nombreuses autres options :
python do_this_first.py &
python do_this_second.py &
python do_this_last.py &
Le bash est séquentiel. Au début, le fichier do_this_first.py sera interprété. Une fois que python a fini de l'exécuter, le contrôle est à nouveau transféré à bash. Le bash à son tour exécutera python do_this_second.py et ainsi de suite.
Donc, essentiellement, do_this_first commence et se termine, do_this_second commence et se termine, puis do_this_last commence et se termine.
Comme l'a dit slhck, ce qui suit est une option.
python do_this_first.py && python do_this_second.py && python do_this_last.py
Ou vous pouvez définir -e, qui se terminera immédiatement, si une ligne renvoie un code d'erreur.
#!/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
Pour moi, ce dernier est plus lisible.