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

21

Как я могу написать следующее в скрипте 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.
GTS Джо
источник

Ответы:

21
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принимают дополнительные команды оболочки для запуска. The detach-clientделает очевидное в конце.

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

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

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

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

tmuxСессии закончится , как только обе команды закончили выполнение.

Кусалананда
источник
3

Это не сработало для меня (я пытался сделать что-то вроде '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

user27221
источник