2017-12-31 29 views
1

.BASH - Führen Sie 6 Skripte, aber nur 3 zusammen, und wenn einer fertig ist, beginnen Sie mit einem anderen

Ich habe einen einfachen Bash-Skript, wo ich 3 zur gleichen Zeit ausgeführt werden, und wenn sie sie beginnen mit den nächsten 3 wie diesem getan werden:

command1 & 
command2 & 
command3 & 
wait 
command4 & 
command5 & 
command6 & 
exit 

Aber wie kann ich mich laufe immer noch so 3 von diese zur gleichen Zeit und nicht auf die anderen drei warten? Nehmen wir an, Befehl1 und Befehl2 sind beendet, aber Befehl3 läuft noch, dann möchte ich Befehl4 und Befehl5 starten, so dass immer 3 Befehle ausgeführt werden.

Dank

+0

Mit aktuellen GNU-Xargs: Legen Sie Ihre Befehle in eine Textdatei. Jeder Befehl in einer separaten Zeile und dann folgendes ausführen: 'xargs -n 1 -P 3 -I {} bash -c {} Cyrus

+0

Ich habe versucht mit dieser: max_jobs = 3 deklarieren -A Cur_jobs = () # Build ein assoziatives Array w/PIDs von Jobs wir gestartet für ((i = 0; i <6; i ++)); do if (($ {# cur_jobs [@]}> = max_jobs)); dann warte -n # warte auf mindestens einen Job, um # ... zu beenden und dann alle Jobs, die nicht ausgeführt werden, aus der Tabelle für pid in "$ {! cur_jobs [@]}" zu entfernen; Kill tun -0 "$ pid" 2>/dev/null && ungesetzt cur_jobs [$ pid] getan fi ./j"$i“& cur_jobs [$!] = 1done warten Aber wie kann Ich spezifiziere das Verzeichnis? Beispielsweise haben command1 und command2 unterschiedliche Positionen – Tim

Antwort

0

bash 4.3 eingeführt, um eine -n Option wait, die Sie für den nächsten Auftrag abzuschließen warten lässt.

command1 & 
command2 & 
command3 & 
wait -n 
command4 & 
wait -n 
command5 & 
wait -n 
command6 & 
exit 
+0

Vielleicht verschieben Sie diese Antwort möglicherweise auf die gekennzeichnete doppelte Frage? –

Verwandte Themen