Como abrir um terminal, dividir em 9 terminais e alternar entre eles usando um script?

17

Gostaria de abrir um terminal, dividi-lo para digamos 9 partes (3x3) e executar algum script bash. Mas para cada parte terminal script diferente.

Isso pode ser feito usando perl, python ou até bash?

Como posso alternar entre esses pequenos terminais sem usar atalhos de teclado?

A propósito, estou usando terminator. E se houver algum outro emulador de terminal que permita essa funcionalidade, qual é?

jirislav
fonte
terminatornão é uma concha. Existem dois emuladores de terminal diferentes chamados terminator(apenas um dos quais acredito que pode dividir a tela).
Stéphane Chazelas
Ah, obrigado .. então eu gostaria de saber como dividir terminatorusando script? :) E alternar entre essas partes?
jirislav
1
Eu nunca o usei e não tenho tempo para pesquisá-lo agora, mas acho (embora não tenha certeza) que o byobu poderia ajudá-lo se você estiver executando os terminais em um sistema remoto - consulte help.ubuntu. com.br / comunidade / Byobu . Byobu é executado em muitas distribuições * nix
Clive van Hilten
1
Como o @ClivevanHilten menciona e responde aqui, isso pode ser feito com o amigável Byobu (que por padrão fica no topo do tmux).
Pablo A

Respostas:

35

Para me plagiar , você pode definir um perfil com as configurações desejadas (instruções adaptadas daqui ):

  1. Execute terminatore configure o layout desejado. Você pode usar Ctrl+ Shift+ Epara dividir as janelas verticalmente e Ctrl+ Shift+ O(que é O como em grande quantidade, não zero) para dividir horizontalmente. Para este exemplo, eu criei um layout com 6 painéis:

    insira a descrição da imagem aqui

  2. Clique com o botão direito na terminatorjanela e escolha "Preferências". Quando a janela Preferências estiver aberta, vá para "Layouts" e clique em "Adicionar":

    insira a descrição da imagem aqui

  3. Isso preencherá a lista Layout com seu novo layout:

    insira a descrição da imagem aqui

  4. Encontre cada um dos terminais que você criou no layout e clique neles; à direita, digite o comando que deseja executar neles na inicialização:

    insira a descrição da imagem aqui

    IMPORTANTE: Observe que o comando é seguido por ; bash. Se você não fizer isso, os terminais não estarão acessíveis, pois executarão o comando que você dá e sai. Você precisa iniciar um shell após cada comando para poder usar os terminais.

    Depois de definir todos os comandos, clique em "Fechar" e saia terminator.

  5. Abra o terminatorarquivo de configuração ~/.config/terminator/confige exclua a seção em layouts da configuração padrão. Em seguida, altere o nome do layout que você criou para o padrão. Deve ser algo como isto:

    [global_config]
    [keybindings]
    [profiles]
      [[default]]
    [layouts]
      [[default]]
        [[[child0]]]
          position = 446:100
          type = Window
          order = 0
          parent = ""
          size = 885, 550
        [[[child1]]]
          position = 444
          type = HPaned
          order = 0
          parent = child0
        [[[child2]]]
          position = 275
          type = VPaned
          order = 0
          parent = child1
        [[[child5]]]
          position = 219
          type = HPaned
          order = 1
          parent = child1
        [[[child6]]]
          position = 275
          type = VPaned
          order = 0
          parent = child5
        [[[child9]]]
          position = 275
          type = VPaned
          order = 1
          parent = child5
        [[[terminal11]]]
          profile = default
          command = 'df -h; bash'
          type = Terminal
          order = 1
          parent = child9
        [[[terminal10]]]
          profile = default
          command = 'export foo="bar" && cd /var/www/; bash'
          type = Terminal
          order = 0
          parent = child9
        [[[terminal3]]]
          profile = default
          command = 'ssh -Yp 24222 [email protected]'
          type = Terminal
          order = 0
          parent = child2
        [[[terminal4]]]
          profile = default
          command = 'top; bash'
          type = Terminal
          order = 1
          parent = child2
        [[[terminal7]]]
          profile = default
          command = 'cd /etc; bash'
          type = Terminal
          order = 0
          parent = child6
        [[[terminal8]]]
          profile = default
          command = 'cd ~/dev; bash'
          type = Terminal
          order = 1
          parent = child6
    [plugins]

O resultado final é que, quando você executa, terminatorele abre com 6 painéis, cada um dos quais foi executado ou está executando os comandos que você especificou:

insira a descrição da imagem aqui

Além disso, você pode configurar quantos perfis diferentes desejar e iniciar o terminador com a -popção fornecendo um nome de perfil ou alternar manualmente para o perfil desejado após o lançamento.

terdon
fonte
Terdon, obrigado! Provavelmente foi aqui que aprendi a escrever esse arquivo de configuração!
dotancohen
@dotancohen fico feliz em saber que eu era de ajuda :)
terdon
1
O que! Muito obrigado, o "; bash" salvou minha vida!
Etienne
"Você precisa iniciar um shell após cada comando para poder usar os terminais." Incrível - isso não foi nada intuitivo quando eu tentei inicialmente. Eles devem incluir algum tipo de caixa de seleção para habilitar isso automaticamente.
dtmland
5

Você está procurando pelo terminal multiplexador tmux.

https://github.com/tmux/tmux

Sujit Maharjan
fonte
Sim, isso parece outra possibilidade de como realizar o que preciso. Obrigado :)
jirislav
tmuxé excelente!
dotancohen
3

Voltar quando eu estava usando terminatoreste é o arquivo rc que eu usei para abrir um monte de terminais e executar aplicativos. Salve-o em .config/terminator/config.

[global_config]
  title_hide_sizetext = True
  enabled_plugins = LaunchpadCodeURLHandler, APTURLHandler, LaunchpadBugURLHandler
[keybindings]
[profiles]
  [[default]]
    font = DejaVu Sans Mono 9
    cursor_blink = False
    scrollback_infinite = True
[layouts]
  [[default]]

    [[[root]]]
      position = -4:0
      type = Window
      order = 0 
      parent = ""
      size = 1072, 1884

    [[[grand]]]
      position = 536 
      type = HPaned
      order = 0 
      parent = root
    [[[left]]]
      position = 942 
      type = VPaned
      order = 0 
      parent = grand
    [[[right]]]
      position = 942 
      type = VPaned
      order = 1 
      parent = grand



    [[[terminal1]]]
      profile = default
      type = Terminal
      order = 0 
      parent = left
      command = "cd ~/code/foo; bash"
    [[[terminal2]]]
      profile = default
      type = Terminal
      order = 1 
      parent = left
      command = "cd ~/bar/baz; bash"



    [[[terminal3]]]
      profile = default
      type = Terminal
      order = 1 
      parent = right
      command = ""
    [[[terminal4]]]
      profile = default
      type = Terminal
      order = 0 
      parent = right
      command = "cmus; bash"



[plugins]

Edição: Observe que essas informações provavelmente vieram da postagem de Terdon em um segmento muito anterior. Estou usando essa configuração há alguns meses, mas a postagem de Terdon aqui parece muito familiar!

dotancohen
fonte
Isto é o que eu estava procurando - como dividir o terminal e executar scripts específicos - obrigado! Mas eu não gostaria de executá-lo sempre que assim. Existe a possibilidade de ter mais dessas configurações e abrir cada uma, dependendo do que eu preciso? Digamos adicionando o parâmetro --config2 ou --config1?
jirislav
Você não adiciona mais arquivos de configuração, adiciona seções ao arquivo de configuração. Veja o post de Terdon, ele explica muito bem, na verdade eu aprendi isso com o post dele em um tópico anterior.
dotancohen
Oh, entendo ... Assim, aceitei sua resposta como a mais útil. Mas obrigada mesmo assim.
jirislav
Boa escolha! Na verdade, eu queria sugerir que ele aceitasse a resposta, pois as informações vieram de seu trabalho duro!
dotancohen
2

Script de wrapper para dividir o emulador de terminal Terminator https://github.com/AlekseyChudov/terminator-split

Aleksey Chudov
fonte
2
Você deve incluir as informações relevantes aqui, depois que o github se for, sua resposta perde todo o seu valor potencial.
Anthon
1
parece bom .. mas como executo esse script?
Sachin
1
terminator-splittem um grande potencial, mas não parece haver nenhuma maneira de executar comandos diferentes nas diferentes divisões, eo -margumento mostrado nos exemplos não está listado no resumo de utilização
bitinerant