скрипт tmux для запуска нескольких команд

скрипт tmux для запуска нескольких команд

Как написать следующее в скрипте bash?

tmux # Start tmux session.
compass watch /path/to/project1/compass/ # Run the first process.
Ctrl + B, " # Split the pane.
compass watch /path/to/project2/compass/ # Run the second process.
Ctrl + B, D # Exit the session.

решение1

tmux \
    new-session  'compass watch /path/to/project1/compass/' \; \
    split-window 'compass watch /path/to/project2/compass/' \; \
    detach-client

Команда new-session(которая создает новый tmuxсеанс) и split-windowкоманда (которая разделяет текущее окно на две панели) в tmuxпринимает необязательные команды оболочки для запуска. detach-clientВ конце делает очевидное.

Если вам нужно горизонтальное разделение (две панели рядом), используйте split-window -hкоманду выше.

При отправке нескольких tmuxкоманд tmuxвам необходимо разделять их символом ;. ;Необходимо защитить его от оболочки, заключив в кавычки/экранировав ( ';', ";"или \;), чтобы оболочка не интерпретировала его как конец команды tmux.

Я разбил все это на отдельные строки для удобства чтения. Если вы делаете это в скрипте (что я рекомендую), убедитесь, что после финала \в каждой строке ничего нет.

Повторно подключитесь к сеансу с помощью tmux a, tmux attach, или tmux attach-session(все эти действия эквивалентны).

Сеанс tmuxзавершится после завершения выполнения обеих команд.

решение2

У меня это не сработало (я пытался сделать что-то вроде 'ls -la'). Вот что получилось:

tmux new-session -d bash
tmux split-window -h bash
#sends keys to first and second terminals
tmux send -t 0:0.0 "<my-first-command>" C-m
tmux send -t 0:0.1 "<my-second-command>" C-m
tmux -2 attach-session -d

Это позволило мне запускать довольно стандартные вещи, и хотя это выглядит уродливо, это довольно функционально.

Просто оставлю это здесь на случай, если другие люди будут искать то же самое.

Источник:https://gist.github.com/kizzx2/4739236

решение3

Чтобы выполнить короткую команду без выхода в конце:

tmux \
    new-session  'ls ; bash' \; \
    split-window 'ls ; bash' 

или

tmux \
    new-session  'ls ; bash' \; \
    new-window   'ls ; bash' 

Связанный контент