2010-02-16 27 views
21

Tengo 1 script bash que ejecuta otro script bash; sin embargo, el primer bashscript no espera que el segundo se complete antes de continuar, ¿cómo puedo forzarlo? ¿esperar?Bash Script Llama a otro script bash y espera a que se complete antes de continuar

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..." 

La forma en que está ahora, se ejecutará second.sh, y continuar, sin esperar a que second.sh para completar.

+3

Cabe esperando; ¿Es ese tu guión completo? –

Respuesta

13

Normalmente lo hace; algo más está sucediendo ¿Estás seguro de que la otra secuencia de comandos no está ejecutando algo en el fondo en su lugar? Puede intentar usar wait independientemente.

+2

'esperar' solo espera a los hijos directos de la reunión principal; si el niño ejecuta algo en segundo plano y sale, el proceso principal no puede esperar porque es heredado por 'PID 1' - el proceso de inicio. (A menos que haya cambiado algo dramáticamente que no sé). –

1

intentar usar bash second.sh y comprobar su second.sh y asegúrese de que usted no tiene programas que se ejecutan en segundo plano

7

Usted puede simplemente añadir el comando wait después de ejecutar el segundo guión, se va a esperar para todos proceso que se inicia a partir de la secuencia de comandos principales

usted puede incluso recuperar el PID de la segunda secuencia de comandos con el comando echo $! directamente después de llamar al segundo guión, y luego pasar este PID como un argumento para el comando wait

11

AS uso un esquema como este en pocas secuencias de comandos, simplemente llamando a las segundas secuencias de comandos en la misma copia de shell usando source.

En script-1:

source script2.sh 

o:

. script2.sh 

Por lo tanto - no hay un comando en script-1 no se procedió hasta script2.sh pondrá fin a todos lo que es 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! 
+2

Me sorprende que esto no haya obtenido más votos. Esto es exactamente lo que OP solicitó. –

Cuestiones relacionadas