Ich möchte einige Befehle ausführen, von denen jeder erst beendet wird, wenn Strg-C gedrückt wird. Gibt es etwas, das ich ausführen kann, um alle gleichzeitig auszuführen, und Strg-C beendet sie alle? Sie können den Terminalausgang gemeinsam nutzen.
Insbesondere habe ich den Kompass-Compiler, den Coffeescript-Compiler und einen benutzerdefinierten Befehl, der nach Dateiänderungen sucht, die alle ausgeführt werden und nach Dateiänderungen suchen. Ich möchte nicht für jeden Befehl ein Terminal laden.
wait
, dass sie unnötige "Prozess x beendet" -Nachrichten unterdrückt.wait
ist besser als while-Schleife. Ich habe mein Skript mit Ihrem Vorschlag verbessert. Es funktioniert jetzt auch für N parallele Befehle.Basierend auf dem Kommentar von @ alessandro-pezzato. Führen Sie mehrere Befehle aus, indem Sie
&
zwischen den Befehlen verwenden.Beispiel:
Die Befehle werden im Hintergrund ausgeführt.
quelle
&!
und&
beide haben gleich gearbeitet.Verwenden Sie GNU Parallel:
(echo command1; echo command2) | parallel parallel ::: command1 command2
Töten:
parallel ::: command1 command2 & PID=$! kill -TERM $PID kill -TERM $PID
quelle
parallel
befindet sich im EPEL-Repository.Dies kann mit einem einfachen Makefile erfolgen:
sleep%: sleep $(subst sleep,,$@) @echo $@ done.
Verwenden Sie
-j
Option.$ make -j sleep3 sleep2 sleep1 sleep 3 sleep 2 sleep 1 sleep1 done. sleep2 done. sleep3 done.
Ohne
-j
Option wird es seriell ausgeführt.$ make -j sleep3 sleep2 sleep1 sleep 3 sleep3 done. sleep 2 sleep2 done. sleep 1 sleep1 done.
Sie können auch mit der Option -n trocken laufen.
quelle
Ich schlage ein viel einfacheres Dienstprogramm vor, das ich gerade geschrieben habe. Es heißt derzeit par, wird aber bald in parl oder pll umbenannt, hat sich noch nicht entschieden.
https://github.com/k-bx/par
API ist so einfach wie:
par "script1.sh" "script2.sh" "script3.sh"
Präfixbefehle können erfolgen über:
par "PARPREFIX=[script1] script1.sh" "script2.sh" "script3.sh"
quelle
parallel ::: "script1.sh" "script2.sh" "script3.sh"
Der zweite würde normalerweise --tag:parallel --tag ::: "script1.sh" "script2.sh" "script3.sh"
Um mehrere Befehle auszuführen, fügen Sie einfach
&&
zwei Befehle wie folgt hinzu:command1 && command2
Und wenn Sie sie in zwei verschiedenen Terminals ausführen möchten, gehen Sie folgendermaßen vor:
gnome-terminal -e "command1" && gnome-terminal -e "command2"
Dadurch werden 2 Terminals mit diesen geöffnet
command1
undcommand2
ausgeführt.Hoffe das hilft dir.
quelle
command2
nachcommand1
und nur wenn escommand1
gelingt. Versuchensleep 3 && sleep 3
Sie es und Sie werden sehen, dass es 6s dauert.