it-swarm.com.de

Erstellen Sie neue Terminator-Registerkarten aus dem Bash-Skript

Ich habe ein Bash-Skript geschrieben, das vier Prozesse mit langer Laufzeit (jeweils 20 bis 30 Minuten) ausführt:

terminator -T "<NAME-1>" -e "<COMMAND-1>" &
terminator -T "<NAME-2>" -e "<COMMAND-2>" &
terminator -T "<NAME-3>" -e "<COMMAND-3>" &
terminator -T "<NAME-4>" -e "<COMMAND-4>" &

(wobei <COMMAND-X> ein Wert ist, der zuvor durch mehrere Bash-Zeilen erstellt wurde, einschließlich Aufrufe von Kubernetes).

Wenn ich mein Skript ausführe, wird jeder dieser Prozesse in einem neuen Terminator-Fenster geöffnet. Um zu vermeiden, dass jedes Mal, wenn ich das Skript ausführe, vier neue Fenster erscheinen, möchte ich, dass sie alle in verschiedenen Ansichten eines einzelnen neuen Fensters gestartet werden. Gibt es eine Möglichkeit, dies zu tun? Es ist nichts in dem Handbuch .

Ich würde eine Lösung akzeptieren, die ein anderes Terminal verwendet.

7
Ben Watson

Öffnen Sie zunächst eine Terminator-Instanz, teilen Sie sie wie gewünscht in vier Bereiche auf und als neues Layout speichern (schließen Sie alle geöffneten Terminal-Fenster mit Ausnahme desjenigen, das Sie mit Ihrem neuen Profil eingerichtet haben). Fügen Sie für jeden der 4 Bereiche einen benutzerdefinierten Befehl hinzu, aber fügen Sie einfach den Text COMMAND1, COMMAND2 usw. hinzu. Speichern Sie das neue Layout als foo (oder was auch immer). Zu diesem Zeitpunkt sollte Ihr ~/.config/terminator/config ungefähr so ​​aussehen:

[global_config]
  enabled_plugins = LaunchpadCodeURLHandler, APTURLHandler, LaunchpadBugURLHandler
  focus = mouse
  suppress_multiple_term_dialog = True
  title_use_system_font = False
[keybindings]
[layouts]
  [[default]]
    [[[child0]]]
      fullscreen = False
      last_active_term = ad14f6cd-bcc3-4a80-9852-3fe64f7fc2eb
      last_active_window = True
      maximised = False
      order = 0
      parent = ""
      size = 735, 474
      title = sometitle
      type = Window
  [[foo]]
    [[[child0]]]
      fullscreen = False
      last_active_term = 18ebf009-c427-4c2f-8017-78c379a72d31
      last_active_window = True
      maximised = False
      order = 0
      parent = ""
      position = 2730:254
      size = 735, 474
      title = NAME-1
      type = Window
    [[[child1]]]
      order = 0
      parent = child0
      position = 237
      ratio = 0.5
      type = VPaned
    [[[child2]]]
      order = 0
      parent = child1
      position = 368
      ratio = 0.500680272109
      type = HPaned
    [[[child5]]]
      order = 1
      parent = child1
      position = 368
      ratio = 0.500680272109
      type = HPaned
    [[[terminal3]]]
      command = COMMAND1
      order = 0
      parent = child2
      profile = default
      title = NAME-1
      type = Terminal
      uuid = 01e46a5a-0a12-4861-a81e-e376af6041a7
    [[[terminal4]]]
      command = COMMAND2
      order = 1
      parent = child2
      profile = default
      type = Terminal
      uuid = 094d544d-944c-48a7-9960-00370253e799
    [[[terminal6]]]
      command = COMMAND3
      order = 0
      parent = child5
      profile = default
      type = Terminal
      uuid = fe19f601-1963-4af7-8870-f90e289d3d27
    [[[terminal7]]]
      command = COMMAND4
      order = 1
      parent = child5
      profile = default
      type = Terminal
      uuid = 18ebf009-c427-4c2f-8017-78c379a72d31
[plugins]
[profiles]
  [[default]]
    cursor_color = "#aaaaaa"
    font = Monaco 11
    scrollback_infinite = True
    scrollback_lines = 5000
    use_system_font = False

Ändern Sie nun Ihr Bash-Skript, um COMMANDN durch den tatsächlichen Befehl zu ersetzen, den Sie ausführen müssen:

#!/bin/bash

## change these to whatever you actually need
command1="echo one; bash"
command2="echo two; bash"
command3="tail -f /var/log/messages; bash"
command4="top"

## Modify terminator's config
sed -i.bak "s#COMMAND1#$command1#; s#COMMAND2#$command2#; s#COMMAND3#$command3#; s#COMMAND4#$command4#;" ~/.config/terminator/config

## Launch a terminator instance using the new layout
terminator -l foo

## Return the original config file
mv ~/.config/terminator/config.bak ~/.config/terminator/config

Wenn Sie dieses Skript ausführen, wird jetzt ein neues Terminalfenster mit 4 Fenstern geöffnet, in denen jeweils einer Ihrer Befehle ausgeführt wird.

Wichtig : Wenn der Befehl ausgeführt wird und dann beendet wird (im Gegensatz zu top, das ausgeführt wird, bis Sie anweisen, anzuhalten) , Sie benötigen COMMAN; bash als Befehl, damit eine neue Shell gestartet wird. Andernfalls wird der Befehl ausgeführt und die Shell wird sofort beendet. Deshalb habe ich nach jedem Befehl ; bash außer top in Ihrem Skript.

8
terdon

Alternative:

Da Sie bereits erwähnt haben, dass Sie alternative Lösungen akzeptieren würden, sollten Sie die Verwendung von gnome-terminal in Betracht ziehen. In der Vergangenheit habe ich dafür Skripte geschrieben, die es erlauben, Fenster mit mehreren Tabs zu erzeugen und eigene Befehle auszuführen. Bitte sehen Sie dies zum Beispiel: https://askubuntu.com/a/863179/295286

Was den Terminator selbst anbelangt, so scheint es möglich zu sein, neue Tabs für bereits vorhandene Fenster über die Option --new-tab zu erzeugen, aber ich sehe keine Möglichkeit, ein Fenster mit mehreren Tabs mit anderen Befehlen als der Option --layout zu erzeugen. Sie können es natürlich automatisieren, da alle Layouts in der ~/.config/terminator/config -Datei abgelegt sind, sodass Sie eine benutzerdefinierte Konfigurationsdatei schreiben können. Ich werde versuchen, eines zu schreiben, wenn ich es nicht vergesse, aber ich denke, der Ansatz von gnome-terminal ist viel einfacher und genau das, was Sie wollen.

Ursprüngliche Antwort

Terminator hat die Einstellung layout, die Sie mit einer bestimmten Anzahl von Registerkarten und Teilungen verwenden und ihnen bestimmte Farbprofile zuweisen können. Sie möchten das Fenster öffnen, beliebig viele Registerkarten hinzufügen und dann mit der rechten Maustaste auf Einstellungen, Registerkarte Layout und Schaltfläche Hinzufügen klicken

enter image description here

Speichern Sie das Layout, nachdem Sie es bearbeitet haben. Jetzt können Sie use terminator -l <Layout Name> aufrufen, um ein Fenster mit genau diesem Satz von Registerkarten zu erzeugen. Auf meinem Screenshot kann man zum Beispiel sehen, dass ich das custom -Layout habe, also würde ich terminator -l custom verwenden.

4