Tal como está, se ejecutarán uno tras otro, independientemente de si fallaron o no. Solo tienen que salir en algún momento, luego se ejecuta el siguiente comando. Uno tras otro.
Si desea que se ejecuten solo si los comandos anteriores no salieron con un error, use:
python do_this_first.py && python do_this_second.py && python do_this_last.py
Aquí, los dos signos de y comercial funcionan como un AND
lógico . El segundo script solo se ejecutará cuando el primero haya salido limpiamente, y el tercero solo cuando el segundo se haya ejecutado sin errores. Si hubo algún error, ninguno de los siguientes comandos se ejecutará.
Sin embargo, si desea ejecutarlos en paralelo, puede hacerlo, pero hay muchas otras opciones:
python do_this_first.py &
python do_this_second.py &
python do_this_last.py &
El bash es secuencial. Al principio se interpretará el archivo do_this_first.py. Después de que python termina de ejecutarlo, el control se transfiere a bash nuevamente. El bash a su vez ejecutará python do_this_second.py y así sucesivamente.
Básicamente, haz_esto_primero comienza y termina, haz_esto_segundo comienza y termina y luego haz_esto_último comienza y termina.
Como dijo slhck, la siguiente es una opción.
python do_this_first.py && python do_this_second.py && python do_this_last.py
O puede establecer -e, que se cerrará de inmediato, si una línea devuelve un código de error.
#!/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
Para mí, este último es más legible.