traduccion - Bash Script Llama a otro script de bash y espera a que se complete antes de continuar
bash tutorial (4)
Como uso un esquema como este en algunos scripts, solo llamo segundos scripts en el mismo shell-copy usando source
.
En script-1
:
source script2.sh
o:
. script2.sh
Por lo tanto, ningún comando en script-1
no se script2.sh
hasta que script2.sh
finalice todas sus tareas.
Pequeño ejemplo
Primer guión:
$ cat script-1.sh
#!/bin/bash
echo "I''m sccript $0."
echo "Runnig script-2..."
source script-2.sh
echo "script-2.sh finished!"
Segundo guión:
$ cat script-2.sh
#bin/bash
echo "I''m script-2. Running wait operation..."
sleep 2
echo "I''m ended my task."
Cómo funciona:
$ ./script-1.sh
I''m sccript ./script-1.sh.
Runnig script-2...
I''m script-2. Running wait operation...
I''m ended my task.
script-2.sh finished!
Tengo 1 script de bash que ejecuta otro script de bash, sin embargo, el primer bashscript no está esperando a que se complete el segundo antes de continuar, ¿cómo puedo forzarlo a esperar?
Por ejemplo:
#!/bin/bash
# first.sh
#call to secondary script
sh second.sh
echo "second.sh has completed"
echo "continuing with the rest of first.sh..."
Tal como está ahora, ejecutará second.sh y continuará sin esperar a que second.sh se complete.
Normalmente lo hace; algo más está sucediendo. ¿Estás seguro de que el otro script no está ejecutando algo en segundo plano? Puedes intentar usar la wait
independientemente.
Simplemente puede agregar el comando de wait
después de ejecutar la segunda secuencia de comandos, esperará todo el proceso que inicie desde su secuencia de comandos principal
Incluso puede recuperar el PID de su segundo script con el comando echo $!
directamente después de llamar al segundo script, y luego pasar este PID como un argumento al comando de wait
intente usar bash second.sh
y revise su second.sh y asegúrese de no tener programas que se ejecuten en segundo plano