Daher möchte ich unter Linux viermal ein Skript ausführen und dann die Ausgabe bearbeiten.
Ich kann:
script 1 > output1.txt
script 2 > output2.txt
script 3 > output3.txt
script 4 > output4.txt
cat output1.txt output2.txt output3.txt output4.txt > output5.txt
sort output5.txt | uniq -u
Aber ich möchte, dass die ersten vier parallel laufen (schneller). Wenn ich sie in den Hintergrund stelle, springt sie in die fünfte Zeile, was bis zum Ende der ersten vier nicht erfolgreich sein wird.
EDIT: Danke für die Antworten. Ich habe einige davon ausprobiert, bin mir aber nicht sicher, ob sie funktionieren werden, da ich (a) 4 verschiedene Skripte gleichzeitig ausführen muss, nicht das gleiche vier Mal, und (b) die Ausgaben jedes Skripts müssen in einer TXT-Datei gespeichert werden (dies ist sehr wichtig). Ich habe das oben Gesagte aktualisiert, um dies widerzuspiegeln.
Die Leute in meinem Büro lieben es, xargs zu benutzen, also wäre das meine Vorliebe (obwohl ich für alles offen bin).
Vielen Dank!
parallel
(beiden Versionen) problemlos erledigen . Hast du es versucht?Antworten:
Das eingebaute Wait Bash erledigt den Trick ...
quelle
Mit moreutils '
parallel
:Die zweite Zeile wird ausgeführt, sobald alle Jobs beendet
parallel
wurden. Wenn Ihr Skript Argumente enthält, müssen Sie diese in Anführungszeichen setzen, zDies kann auch mit GNU Parallel gemacht werden, aber ich habe es aufgrund offensichtlicher Namenskonflikte nicht auf meinem System. Ich denke, Sie müssen nur eine Liste von Skripten erstellen und dann:
Das
-j4
Mittelparallel
wird, wenn möglich, auf 4 Kernen ausgeführt.quelle
Ich empfehle die Verwendung von GNU
parallel
. Es ist eine praktische Anleitung für die es hier . Entweder können Sie alle vier Skripte gleichzeitig ausführen und dann den fünften Befehl ausführen, oder Sie können festlegen, dass die Ausgabe von den ersten vier in die vierte umgeleitet und alle fünf parallel ausgeführt werden. Hier ist der Befehl, alle vier gleichzeitig auszuführen:Sie können die Ausgabe direkt an den fünften Befehl weiterleiten. Standardmäßig
parallel
werden die Ausgaben der einzelnen Befehle gruppiert. Wenn z. B. Skript-2 zuerst ausgeführt wird, beginnt der Ausgabestream mit der gesamten Ausgabe von Skript-2, gefolgt von der des nächsten auszuführenden Befehls. Verwenden--line-buffer
Sie diese Option, wenn Sie sich nicht für das Mischen von Ausgabezeilen verschiedener Befehle interessieren. Verwenden--keep-order
Sie diese Option, wenn Sie die Ausgabe der Befehle in der richtigen Reihenfolge benötigen, dh die Ausgabe von Skript-1, dann Skript-2 usw.Eine andere Möglichkeit ist, einfach zu verwenden
xargs
, was bereits auf Ihrem System installiert sein sollte.xargs
verfügt über eine-P
Option, mit der Sie die Anzahl der gleichzeitigen Prozesse angeben können. Beachten Sie, dass die Ausgabe nicht gruppiert werden kann, sodass Sie nicht direkt in den fünften Befehl übergehen können. Normalerweise müssen Sie auch einstellen-n
.quelle