2010-02-16 12 views
21

Ich habe 1 Bash-Skript, das ein anderes Bash-Skript ausführt, aber das erste Bashscript wartet nicht auf den zweiten, bevor es weitergeht, wie kann ich es erzwingen warten?Bash Script Ruft ein anderes Bash-Skript auf und wartet darauf, dass es abgeschlossen wird, bevor es weitergeht.

Zum Beispiel:

#!/bin/bash 
# first.sh 

#call to secondary script 
sh second.sh 
echo "second.sh has completed" 

echo "continuing with the rest of first.sh..." 

So wie es jetzt ist, wird es laufen second.sh, und weiter, ohne second.sh abwarten.

+3

Es warten werden sollte; Ist das wirklich dein ganzes Drehbuch? –

Antwort

13

Normalerweise tut es; etwas anderes passiert. Sind Sie sicher, dass das andere Skript nicht etwas im Hintergrund ausführt? Sie können versuchen, wait unabhängig zu verwenden.

+2

'wait' wartet nur auf direkte Kinder der Eltern-Bash; Wenn das Kind etwas im Hintergrund ausführt und beendet, kann der Elternprozess nicht darauf warten, da es von "PID 1" - dem Initprozess - geerbt wird. (Es sei denn, etwas hat sich dramatisch verändert, von dem ich nichts weiß.) –

1

bereit second.sh mit bash second.sh und überprüfen und sicherstellen, dass Sie keine Programme haben, die

7

Sie können einfach fügen Sie den Befehl wait, nachdem Sie das zweite Skript ausführen, im Hintergrund ausgeführt wird, wird es für alle warten Prozess, den Sie von Ihrem Haupt Skript

Sie starten können sogar die PID des zweiten Skript genesen dem Befehl echo $! direkt, nachdem Sie das zweite Skript aufrufen, und dann diese PID als Argument übergeben an den wait Befehl

11

AS Ich benutze ein Schema wie dieses in wenigen Skripten - rufe nur zweite Skripte in derselben Shell auf - kopiere source.

In script-1:

source script2.sh 

oder:

. script2.sh 

So - niemand Befehl in script-1 nicht bis script2.sh vorgegangen werden alle es Aufgaben beenden.

Kleines Beispiel.

erstes Drehbuch:

$ cat script-1.sh 
#!/bin/bash 
echo "I'm sccript $0." 
echo "Runnig script-2..." 

source script-2.sh 

echo "script-2.sh finished!" 

Zweite Skript:

$ cat script-2.sh 
#bin/bash 
echo "I'm script-2. Running wait operation..." 
sleep 2 
echo "I'm ended my task." 

Wie es funktioniert:

$ ./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

Ich bin überrascht, dass das nicht mehr Stimmen bekommen hat. Dies ist genau das, was OP angefordert hat. –

Verwandte Themen