genau zu sein, ich habe zwei Befehl benötigen in Shell auf Ubuntu zugleich ausgeführt werden soll, wie command_A und command_B. Und ich habe einige andere Befehle müssen nur ausgeführt werden, nachdem command_A und command_B beendet hat, benannt als command_rest. Darüber hinaus command_A und command_B laufen in separaten Terminals und wenn sie fertig sind, können sie sich schließen. Dies benötigt möglicherweise Techniken im Zusammenhang mit Signal und warten und gnome-terminal ich denke, aber ich kann keine Lösung finden., wie mehrere Befehle gleichzeitig und den Rest verarbeiten erst, nachdem alle
Antwort
Sie es so ein Fifo tun können, mit synchronisieren:
# Once in either Terminal
mkfifo A B
# In first Terminal
(echo CommandA; sleep 3; echo done > A) &
# In second Terminal
(echo CommandB; sleep 8; echo done > B) &
# In third Terminal
read < A; read < B; echo Rest
Grundsätzlich vor Rest
laufen kann, muss es lesen von beiden A
etwas haben und B
und nichts wird ankommen es bis zu lesen CommandA
ist fertig und auf A
geschrieben und auch CommandB
ist fertig und auf B
geschrieben.
oben Das ist nur ein Beispiel, das CommandA
und CommandB
und Rest
statt Ausführen von Befehlen widerhallt, die ich nicht habe. Sie werden tatsächlich so etwas wie dies wollen (ich habe es geändert, so dass Sie in verschiedenen Verzeichnissen in den verschiedenen Terminals sein können)
# Once in either Terminal
mkfifo /tmp/A /tmp/B
# In first Terminal
(CommandA; echo done > /tmp/A) &
# In second Terminal
(CommandB; echo done > /tmp/B) &
# In third Terminal
read < /tmp/A; read < /tmp/B; commandRest
Ich schrieb dies in fifo.sh und führe es mit dem Befehl ". Fifo.sh ", und seine Ausgabe mag Folgendes: CommandA \ n CommandB \ n Rest \ n [2] - Fertig (echo CommandA; Schlaf 3; echo fertig> A) \ n [3] + Fertig (echo CommandB; Schlaf 8; echo done> B) \ n (\ n ist für eine andere Zeile) (die letzte Zeile tauchte auf, wenn ich einen anderen Befehl eintrage) Es scheint bereits funktioniert zu haben, aber ich war nur neugierig, was die Ausgabe in den letzten zwei Zeilen bedeutet. –
Die anderen Zeilen sind nur so, dass ich ein funktionierendes Beispiel zeigen kann, ohne dass jemand 'CommandA',' CommandB' und 'CommandRest' haben muss. Ich habe es jetzt aktualisiert, bitte schauen Sie nochmal. –
Danke für die Aktualisierung Ihrer Antwort ~ Vielleicht a Zum Beispiel, wenn ich den "read" -Befehl in zwei Terminals verwenden möchte und dann, nachdem jeder Tastatur erhalten hat, schreibe ich "echo finish input" als commandRest. Ich habe versucht, mit Ihrer Methode zu implementieren, aber es hat gewonnen 't Arbeit, weil ich an der Eingabe stecken werde. Und wenn ich versuche, neues Terminal mit "gnome-terminal -e" -Befehl in Komma zu öffnen ndA und CommandB können zwei neue Terminals gleichzeitig angezeigt werden, aber der commandRest wartet nicht auf meine Eingabe und echo nur aus. Also ich möchte wissen, wie man es repariert. Vielen Dank! –
Wie Sie mit Fifo-basierten Synchronisation nicht allzu gut scheinen zu tun, könnten Sie Vielleicht versuchen Sie mit GNU Parallel, die, wenn installiert, erstellt eine symbolische Verbindung namens sem
, die als Semaphor fungiert.
Also, in Terminal 1, würden Sie tun:
sem -j 2 --id mark CommandA
und im Terminal 2, würden Sie tun:
sem -j 2 --id mark CommandB
Dann überall Sie beide warten wollten Sie zu beenden, würde tun:
sem --id mark --wait ; CommandRest
Danke für zusätzlichen Rat. Ich habe 'Sleep 10' als CommandA und CommandB versucht und es hat gut funktioniert. Wenn ich jedoch "read" sowohl als "CommandA" als auch als "CommandB" verwende, wird "echo" als "CommandRest" empfangen, und die ersten beiden bleiben hängen und können keine Tastatureingabe empfangen. Wenn ich die ersten zwei Terminals geschlossen habe, zeigt das dritte Terminal tatsächlich "empfangen" an. Das Problem ist also, dass der Befehl 'read' unter diesen Umständen nicht gut funktionieren kann. Kannst du das reparieren? –
Dies ist perfekt möglich und lassen Sie uns bitte wissen, welche Optionen Sie erforscht haben/versucht? – Inian
Ich glaube, das ist, was Sie suchen [\ [Answer \]] (http://stackoverflow.com/a/10909842/5924412) – developerbh
Mögliche Duplikate von [Parallele mehrere Befehle gleichzeitig im selben Terminal ausführen] (http : //stackoverflow.com/questions/10909685/run-parallel-multiple-commands-at-once-in-the-same-terminal) –