
Ich habe ein Haupt-Bash-Skript, das mehrere kleinere Bash-Skripte ausführt (und jedes kleinere Skript führt einen Docker-Container aus). Ich möchte jedoch, dass das zweite Skript erst ausgeführt wird, nachdem die Ausführung des ersten abgeschlossen ist, und so weiter. Das heißt, ich möchte, dass die Prozesse der einzelnen Skripte NICHT gleichzeitig ausgeführt werden. Beispiel:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
Die Online-Vorschläge helfen mir nicht weiter. Ich habe versucht, die PID von 1st_script zu erhalten mit:
1st_Script & echo $!
um dann zu verwenden ps -p <PID> || <2nd_script>
Aber obwohl <1st_Script> & echo $!
eine PID angegeben wird, ps -p <PID>
ist nichts da, wenn ich überprüfe, ob der Prozess da ist. Ich weiß, dass 1st_script läuft, weil der Docker-Container, den es ausführt, mit aufgeführt ist docker ps
. Daher sollte sein Prozess auch mit aufgeführt sein.ps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
ist keine Option, da ich viele Skripte habe und diese nicht lesbar sind
Antwort1
Fortsetzungszeilen können die Lesbarkeit erheblich verbessern:
script1 && script2 && script3 && scriptn
gegen
script1 \
&& script2 \
&& script3 \
&& scriptn
Aber ich habe Probleme, Ihr Problem zu reproduzieren. Was gibt Ihnen den Eindruck, dass Ihre Skriptenichtsequentiell ablaufen?
Ich habe zwei Testskripte erstellt, die jeweils Folgendes enthielten:
echo hello
sleep 15s
und dann ein Skript, das nur enthielt
./script1
./script2
und habe die Wartezeit gemessen, time
um die folgende Ausgabe zu erhalten
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
Wenn die Skripte gleichzeitig ausgeführt würden, hätte die Gesamtzeit weniger als 30 Sekunden betragen.
Ist Ihr Anliegen stattdessen, dass Sie dieContainersoll die Ausführung gestoppt werden, bevor mit dem nächsten Skript fortgefahren wird?