Как запустить набор программ внутри tmux или gnome-терминала внутри скрипта?

32

Я хотел запустить несколько команд одновременно в tmux, gnome-terminal или xfterminal, на каждой вкладке, где запущена одна команда, и закрыть эту вкладку после ее завершения.

Любое другое программное обеспечение также приветствуется

Я хотел выпустить один скрипт для этой работы, например, XX "cmd1" "cmd2" "cmd3"

маргаритка
источник

Ответы:

27

Откройте сеанс tmux и запустите первую команду. Затем запустите больше команд для новых окон и равномерно распределите размеры окон в конце.

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

readПосле каждой команды вызывает окно оставаться открытым после завершения команды , так что вы можете читать вывод.

Данияр
источник
2
Этот ответ заслуживает большего количества голосов. Спасибо чувак.
Лестер Ченг
7

Если конфигурация программ всегда одна и та же, вы можете использовать такой инструмент, как teamocil .

Вам нужно будет создать конфигурацию (например ~/.teamocil/sample), которая содержит что-то вроде:

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

И тогда вы можете запустить: tmux new-session -d "teamocil sample" \; attach

Герт
источник
6

С gnome-terminalним было бы:

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

Каждая вкладка будет закрыта после завершения команды.

saeedn
источник
отлично, но я предпочитаю tmux на этот раз ;-P
маргаритка