¿Los comandos en un script bash se ejecutan en paralelo o uno tras otro?


10

Tome el siguiente script de shell, por ejemplo:

#!/bin/bash
python do_this_first.py 
python do_this_second.py
python do_this_last.py

Cuando ejecuto lo anterior, ¿las 3 secuencias de comandos de Python se ejecutarán en paralelo? Como quiero que 'do_this_second' se ejecute solo después de que 'do_this_first' se haya completado.

Respuestas:


26

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 después del 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 símbolos funcionan como un lógico AND. 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 &

2

La fiesta es secuencial. Al principio se interpretará el archivo do_this_first.py. Una vez 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.
Entonces, esencialmente, do_this_first empieza y termina, do_this_second empieza y termina y luego do_this_last comienza y termina.


2

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 saldrá inmediatamente, 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.