web-dev-qa-db-fra.com

Générer de nouveaux onglets Terminator à partir du script Bash

J'ai écrit un script Bash qui exécute quatre processus longs (20-30 minutes chacun):

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>" &

(où <COMMAND-X> est une valeur créée au préalable par plusieurs lignes de Bash, y compris les appels à Kubernetes).

Lorsque j'exécute mon script, chacun de ces processus s'ouvre dans une nouvelle fenêtre de Terminator. Pour éviter que quatre nouvelles fenêtres ne se produisent chaque fois que j'exécute le script, j'aimerais qu'elles démarrent toutes dans des vues différentes d'une seule nouvelle fenêtre. Y a-t-il un moyen de faire ça? Il n'y a rien dans le manuel .

J'accepterais une solution utilisant un autre terminal.

7
Ben Watson

Commencez par ouvrir une instance de terminateur, divisez-la en 4 volets à votre guise et enregistrer sous une nouvelle présentation (assurez-vous de fermer toutes les fenêtres de terminal ouvertes, à l'exception de celle que vous avez configurée avec votre nouveau profil). Pour chacun des 4 volets, ajoutez une commande personnalisée mais ajoutez simplement le texte COMMAND1, COMMAND2 etc. Enregistrez la nouvelle mise en page sous le nom foo(ou autre). À ce stade, votre ~/.config/terminator/config devrait ressembler à ceci:

[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

Maintenant, modifiez votre script bash pour remplacer COMMANDNpar la commande à exécuter:

#!/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

L'exécution de ce script ouvre maintenant une nouvelle fenêtre de terminal avec 4 volets, chacun exécutant l'une de vos commandes.

Important : si la commande est exécutée puis abandonnée (par opposition à quelque chose comme topqui s'exécute jusqu'à ce que vous lui indiquiez de s'arrêter), vous avez besoin de COMMAN; bash en tant que commande pour qu'un nouveau shell soit démarré. Sinon, la commande sera exécutée et le shell quittera immédiatement. C'est pourquoi j'ai ; bash après chaque commande, à l'exception de topdans y script.

8
terdon

Alternative:

Puisque vous avez indiqué que vous accepteriez une solution alternative, envisagez d'utiliser gnome-terminal. Dans le passé, j'ai écrit des scripts pour cela, qui permettent de créer une fenêtre avec plusieurs onglets et d'exécuter leurs propres commandes. Veuillez voir ceci par exemple: https://askubuntu.com/a/863179/295286

En ce qui concerne le terminateur lui-même, il semble qu'il permette de créer de nouveaux onglets pour une fenêtre existante via l'option --new-tab, mais je ne vois aucune option pour générer une fenêtre à plusieurs onglets avec des commandes individuelles autres que via l'option --layout. Vous pouvez bien sûr l’automatiser, car les mises en page sont toutes placées dans le fichier ~/.config/terminator/config, vous pouvez donc écrire un fichier de configuration personnalisé. J'essaierai d'en écrire un si je n'oublie pas, mais je pense que l'approche gnome-terminal est beaucoup plus simple et correspond exactement à ce que vous voulez.

Réponse originale

Terminator a une préférence layout, que vous pouvez utiliser avec un nombre spécifique de tabulations, de divisions et auquel vous affectez des profils de couleur spécifiques. Ce que vous voulez faire est d'ouvrir une fenêtre, d'ajouter le nombre d'onglets que vous souhaitez, puis de cliquer avec le bouton droit de la souris, d'aller à Préférences, à l'onglet Dispositions et à cliquer sur le bouton Ajouter

enter image description here

Une fois que vous avez terminé la mise en page, enregistrez-la. Maintenant, vous pouvez appeler avec terminator -l <Layout Name> pour faire apparaître une fenêtre avec cet ensemble exact d’onglets. Par exemple, sur ma capture d'écran, vous pouvez voir que j'ai la disposition custom, donc j'utiliserais terminator -l custom

4