Comment lancer un ensemble de programmes dans tmux ou gnome-terminal dans un script?

32

Je voulais lancer quelques commandes simultanément dans tmux ou gnome-terminal ou xfterminal, chaque onglet différent avec une seule commande en cours d'exécution, et fermer cet onglet lorsque cette commande est terminée.

Tout autre logiciel est également le bienvenu

Je voulais émettre un seul script pour faire le travail, par exemple XX "cmd1" "cmd2" "cmd3"

Marguerite
la source

Réponses:

27

Ouvrez une session tmux et lancez la première commande. Lancez ensuite plus de commandes sur les nouvelles fenêtres et répartissez uniformément les tailles de fenêtres à la fin.

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

La readaprès chaque commande , la fenêtre de rester ouvert après la commande terminée afin que vous puissiez lire la sortie.

Danijar
la source
2
Cette réponse mérite plus de votes. Merci mec.
Lester Cheung
7

Si la configuration des programmes est toujours la même, vous pouvez utiliser un outil tel que teamocil .

Vous aurez besoin de créer avec une configuration (par exemple ~/.teamocil/sample), qui contient quelque chose comme:

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

Et puis tu peux courir: tmux new-session -d "teamocil sample" \; attach

Gert
la source
6

Avec gnome-terminalce serait:

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

Chaque onglet sera fermé une fois sa commande terminée.

Saeedn
la source
super aussi, mais je préfère tmux cette fois ;-P
marguerite