Как написать следующее в скрипте 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
Это позволило мне запускать довольно стандартные вещи, и хотя это выглядит уродливо, это довольно функционально.
Просто оставлю это здесь на случай, если другие люди будут искать то же самое.
решение3
Чтобы выполнить короткую команду без выхода в конце:
tmux \
new-session 'ls ; bash' \; \
split-window 'ls ; bash'
или
tmux \
new-session 'ls ; bash' \; \
new-window 'ls ; bash'