Ich möchte ein Skript zum gleichzeitigen Öffnen mehrerer Programme (Server) in getrennten Terminals schreiben - egal welches - und verschiedenen Terminals unterschiedliche Befehle zuweisen, wobei die Befehle im richtigen Terminal "landen". Ist das möglich?
Vielleicht so etwas:
- Terminal1 öffnen
- terminal2 öffnen // gleichzeitig mit 1.
- befehl1 // in terminal1 ausführen, ohne ein neues terminalfenster zu öffnen
- befehl2 // in terminal2 ausführen ohne ein neues terminalfenster zu öffnen
- ...
Kann ich Terminalfenster irgendwie beschriften, damit Befehle im richtigen Terminal ausgeführt werden?
Ich möchte auch alle Terminals beobachten, während deren Programme ausgeführt werden - meine Programme haben ein Argument zum Drucken von Trace / Debug auf Terminal. Ich würde also gerne sehen, welche Nachrichten zwischen ihnen ausgetauscht werden.
HINWEIS: Ich mache mir weniger Sorgen um die Sicherheit der ausgetauschten Daten, da dieses Skript als "Simulation" dienen soll. Ich habe jeden Server so konfiguriert, dass er von einem zugewiesenen Port auf localhost ausgeführt wird.
quelle
Antworten:
Da Sie erwähnt haben, haben Sie das Problem für Ihre spezifische Situation gelöst, nachfolgend eine Lösung für allgemeine Zwecke. Dank
xdotool
‚s--sync
Option, es funktioniert ziemlich zuverlässig in den Tests , die ich lief; Ich konnte Befehle an bestimmte Terminalfenster "senden" und es lief ohne Ausnahme einwandfrei.Wie es in der Praxis funktioniert
Die Lösung besteht aus einem Skript, das mit zwei Optionen ausgeführt werden kann ,
-set
und-run
:So richten Sie eine beliebige Anzahl von Terminalfenstern ein (öffnen Sie diese):
Es werden drei neue Terminals geöffnet, deren Fenster-ID in einer versteckten Datei gespeichert wird:
Aus Gründen der Übersichtlichkeit habe ich das Terminalfenster minimiert, aus dem ich den Befehl ausgeführt habe :)
Nachdem ich drei Fenster erstellt habe, kann ich mit dem Befehl run Befehle an eines der Fenster senden (z. B.):
Wie unten gezeigt, wurde der Befehl im zweiten Terminal ausgeführt:
Anschließend kann ich einen Befehl an das erste Terminal senden:
MAKING
sudo apt-get update
im Terminal 1 auszuführen:und so weiter...
Wie stellt man das ein
Das Skript benötigt beides
wmctrl
undxdotool
:Kopieren Sie das Skript unten in eine leere Datei, speichern Sie es als
target_term
(keine Erweiterung!) In~/bin
(erstellen Sie das Verzeichnis,~/bin
falls erforderlich.Machen Sie das Skript ausführbar (nicht vergessen) und melden Sie sich entweder ab oder führen Sie Folgendes aus:
Richten Sie nun Ihre Terminalfenster mit der Anzahl der erforderlichen Fenster als Argument ein:
Jetzt können Sie Befehle mit dem folgenden Befehl an eines Ihrer Terminals "senden":
Das Drehbuch
Anmerkungen
Das Skript ist für festgelegt
gnome-terminal
, kann jedoch für jedes Terminal (oder auch für ein anderes Programm) verwendet werden, indem Sie Folgendesapplication
im head-Abschnitt des Skripts ändern :Es muss nicht gesagt werden, dass das Skript nur mit dem Terminal-Setup (Windows) funktioniert, das vom Befehl aufgerufen wurde:
Die Terminalfenster werden dann vom Skript "beschriftet", wie Sie in Ihrer Frage erwähnt haben.
target_term
Sitzung starten , wird die versteckte Datei, die vom Skript erstellt wurde, einfach überschrieben, sodass Sie sie ansonsten nicht entfernen müssen.quelle