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.
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 COMMANDN
par 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 top
qui 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 top
dans y script.
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.
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
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