¿Cómo iniciar un conjunto de programas dentro de tmux o gnome-terminal dentro de un script?

32

Quería lanzar algunos comandos simultáneamente en tmux o gnome-terminal o xfterminal, cada pestaña diferente con un solo comando ejecutándose, y cerrar esa pestaña cuando ese comando termine.

Cualquier otro software también es bienvenido

Quería emitir un solo script para hacer el trabajo, por ejemplo XX "cmd1" "cmd2" "cmd3"

margarita
fuente

Respuestas:

27

Abra una sesión tmux e inicie el primer comando. Luego, ejecute más comandos en nuevas ventanas y distribuya uniformemente los tamaños de las ventanas al final.

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

El readdespués de cada comando hace que la ventana permanezca abierta después de que el comando haya terminado para que pueda leer la salida.

danijar
fuente
2
Esta respuesta merece más votos. Gracias hombre.
Lester Cheung
7

Si siempre es la misma configuración de programas, puede usar una herramienta como teamocil .

Tendrá que crear con una configuración (por ejemplo ~/.teamocil/sample), que contenga 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

Y luego puedes ejecutar: tmux new-session -d "teamocil sample" \; attach

Gert
fuente
6

Con gnome-terminaleso sería:

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

Cada pestaña se cerrará una vez que finalice su comando.

saeedn
fuente
genial también, pero prefiero tmux esta vez ;-P
daisy