
Tengo un script bash principal que ejecuta varios scripts bash más pequeños (y cada script más pequeño ejecuta un contenedor acoplable), pero quiero que el segundo script se ejecute solo después de que el primero haya terminado de ejecutarse, y así sucesivamente. Es decir, quiero que los procesos de cada script NO se ejecuten simultáneamente. Ejemplo:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
Las sugerencias en línea no me funcionan. Intenté obtener el PID de 1st_script con:
1st_Script & echo $!
para luego usarlo ps -p <PID> || <2nd_script>
, pero aunque <1st_Script> & echo $!
proporciona un PID, cuando compruebo si el proceso está ahí, ps -p <PID>
no hay nada. Sé que 1st_script se está ejecutando porque el contenedor acoplable que ejecuta aparece en la lista docker ps
. Por lo tanto, su proceso también debería enumerarse conps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
No es una opción porque tengo muchos scripts y no son legibles.
Respuesta1
Las líneas de continuación pueden mejorar enormemente la legibilidad:
script1 && script2 && script3 && scriptn
versus
script1 \
&& script2 \
&& script3 \
&& scriptn
Pero tengo problemas para reproducir tu problema. ¿Qué te da la impresión de que tus guiones sonnofuncionando secuencialmente?
Hice dos scripts de prueba y cada uno contenía
echo hello
sleep 15s
y luego un guión que contenía sólo
./script1
./script2
y midió la espera usando time
para obtener el siguiente resultado
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
Si los scripts se ejecutaran simultáneamente, el tiempo total necesario habría sido inferior a 30 segundos.
¿Es tu problema que quieres elenvase¿dejar de ejecutarse antes de pasar al siguiente script?