Wie starte ich eine Reihe von Programmen in tmux oder gnome-terminal innerhalb eines Skripts?

32

Ich wollte ein paar Befehle gleichzeitig in tmux oder gnome-terminal oder xfterminal starten, wobei jeder unterschiedliche Tab mit einem einzigen Befehl ausgeführt wird, und diesen Tab schließen, wenn dieser Befehl beendet ist.

Jede andere Software ist ebenfalls willkommen

Ich wollte ein einzelnes Skript ausgeben, um den Job zu erledigen, zB XX "cmd1" "cmd2" "cmd3"

Gänseblümchen
quelle

Antworten:

27

Öffnen Sie eine tmux-Sitzung und starten Sie den ersten Befehl. Starten Sie dann weitere Befehle in neuen Fenstern und verteilen Sie die Fenstergrößen am Ende gleichmäßig.

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

Die readnach jedem Befehl bewirkt , dass das Fenster geöffnet bleiben , nachdem der Befehl abgeschlossen ist , so dass Sie die Ausgabe lesen.

danijar
quelle
2
Diese Antwort verdient mehr Stimmen. Danke, Mann.
Lester Cheung
7

Wenn es sich immer um dieselbe Programmkonfiguration handelt, können Sie ein Tool wie teamocil verwenden .

Sie müssen eine Konfiguration erstellen (z. B. ~/.teamocil/sample), die Folgendes enthält:

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

Und dann kannst du laufen: tmux new-session -d "teamocil sample" \; attach

Gert
quelle
6

Damit gnome-terminalwäre es:

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

Jeder Tab wird geschlossen, nachdem sein Befehl beendet wurde.

saeedn
quelle
toll auch, aber diesmal bevorzuge ich tmux ;-P
daisy