Como iniciar um conjunto de programas dentro do tmux ou do gnome-terminal dentro de um script?

32

Eu queria lançar alguns comandos simultaneamente no tmux ou gnome-terminal ou xfterminal, cada guia diferente com um único comando em execução e fechar essa guia quando esse comando terminar.

Qualquer outro software também é bem-vindo

Eu queria emitir um único script para fazer o trabalho, por exemplo, XX "cmd1" "cmd2" "cmd3"

margarida
fonte

Respostas:

27

Abra uma sessão tmux e inicie o primeiro comando. Em seguida, inicie mais comandos em novas janelas e distribua uniformemente os tamanhos das janelas no final.

tmux \
  new-session  "command1 ; read" \; \
  split-window "command2 ; read" \; \
  split-window "command3 ; read" \; \
  split-window "command4 ; read" \; \
  select-layout even-vertical

O readcomando depois de cada comando faz com que a janela permaneça aberta após a conclusão do comando, para que você possa ler a saída.

danijar
fonte
2
Esta resposta merece mais votos. Obrigado cara.
Lester Cheung #
7

Se for sempre a mesma configuração de programas, você poderá usar uma ferramenta como o teamocil .

Você precisará criar com uma configuração (por exemplo ~/.teamocil/sample), que contenha algo como:

windows:
  - name: my-first-window
    root: ~/Projects/foo-www
    filters:
      before: "rvm use 1.9.2"
      after: "echo 'I am done initializing this split.'"
    splits:
      - cmd: "git status"
      - cmd: "bundle exec rails server --port 4000"
        width: 50
      - cmd:
          - sudo service memcached start
          - sudo service mongodb start
        height: 50

E então você pode executar: tmux new-session -d "teamocil sample" \; attach

Gert
fonte
6

Com gnome-terminalisso seria:

gnome-terminal --window -e 'cmd1' --tab -e 'cmd2' --tab -e 'cmd3'

Cada guia será fechada após a conclusão do comando.

saeedn
fonte
tão grande assim, mas eu prefiro tmux desta vez ;-P
daisy