Gerar novas abas Terminator a partir do script Bash

6

Eu escrevi um script Bash que executa quatro processos de longa duração (20 a 30 minutos cada):

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

(onde <COMMAND-X> é um valor criado por várias linhas do Bash antecipadamente, incluindo chamadas para o Kubernetes).

Quando executo meu script, cada um desses processos é aberto em uma nova janela do Exterminador. Para evitar que quatro novas janelas apareçam sempre que eu executar o script, gostaria que todas começassem em diferentes modos de exibição de uma única nova janela. Há alguma maneira de fazer isso? Não há nada no manual .

Eu aceito uma solução que usa um terminal diferente.

    
por Ben Watson 09.01.2017 / 10:05

2 respostas

6

Primeiro, abra uma instância de terminador, divida-a em 4 painéis conforme desejado e salve como um novo layout ( Certifique-se de fechar todas as janelas abertas do terminal, exceto aquela que você configurou com o novo perfil). Para cada um dos 4 painéis, adicione um comando personalizado, mas apenas adicione o texto COMMAND1 , COMMAND2 etc. Salve o novo layout como foo (ou qualquer outro). Nesse momento, seu ~/.config/terminator/config deve ser algo assim:

[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

Agora, modifique seu script bash para substituir COMMANDN pelo comando real que você precisa executar:

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

A execução desse script agora abrirá uma nova janela de terminal com 4 painéis, cada um executando um de seus comandos.

Importante : se o comando for algo que executa e sai (ao contrário de algo como top , que é executado até que você pare), você precisa de COMMAN; bash como o comando que um novo shell será iniciado. Caso contrário, o comando será executado e o shell sairá imediatamente. É por isso que eu tenho ; bash após cada comando, exceto top no script y.

    
por terdon 09.01.2017 / 14:59
4

Alternativa:

Como você mencionou que aceitaria uma solução alternativa, considere usar gnome-terminal . No passado eu escrevi scripts para isso, que permitem a janela de desova com várias abas e executando seus próprios comandos. Por favor, veja isto por exemplo: link

Quanto ao próprio terminador, parece que ele permite gerar novas abas para a janela já existente através da opção --new-tab , mas não vejo opção para gerar janela multi-abas com comandos individuais além da opção --layout . Você pode automatizá-lo, é claro, já que todos os layouts estão em ~/.config/terminator/config file, então você pode escrever um arquivo de configuração personalizado. Vou tentar escrever um, se não esquecer, mas acho que a abordagem gnome-terminal é muito mais simples e é exatamente o que você quer.

Resposta original

O terminador tem uma preferência layout , que você pode usar com um número específico de guias, divisões e atribuir perfis de cores específicos a elas. O que você quer fazer é abrir a janela, adicionar quantas guias quiser e, em seguida, clicar com o botão direito do mouse, ir para Preferências, guia layouts e clicar no botão Adicionar

Quando terminar de editar o layout, salve-o. Agora você pode chamar o uso terminator -l <Layout Name> para gerar janela com esse conjunto exato de guias. Por exemplo, da minha captura de tela você pode ver que eu tenho custom layout, então eu usaria terminator -l custom

    
por Sergiy Kolodyazhnyy 09.01.2017 / 10:15