Вопрос или проблема
Могу ли я скриптовать несколько инструкций bash
/sh
, чтобы они открывались и выполнялись в отдельных панелях tmux
?
У меня есть около 5 или около того команд, которые нужно выполнять одновременно или последовательно.
Обычно я ввожу их вручную в их отдельные панели, у меня есть немного кастомная раскладка.
Если вы уже в сессии tmux, вы можете выполнить команду в новом окне, как показано ниже:
$ tmux neww {command}
Также, если вы хотите разделить окно и выполнить команду:
$ tmux splitw {command}
Вот пример выполнения tail -f для нескольких файлов в каталоге логов:
$ find logs/ -name '*.log' | xargs -n1 -I{} bash -c 'tmux splitw "tail -f $1"; tmux select-layout main-vertical' -- {}
Часть tmux select-layout
предназначена для исправления раскладки панели.
добавлено в соответствии с комментарием:
Вы можете использовать:
$ tmux new {command}
Если вы не в сессии tmux. Так что вы можете комбинировать их так.
test.sh:
tmux new -s foo "bash tmux-test.sh; wait"
tmux-test.sh:
tmux neww htop
tmux neww htop
tmux splitw htop
и затем выполняете test.sh
Вот метод, который я лично использую для легкого создания рабочих пространств с помощью bash вместо плагина.
Сначала создайте файл с вашими утилитарными функциями. Вот некоторые из моих…
# create_session <session name> <directory>
# attach_session <session name>
# new_window <session name> <window id> <directory>
# new_window_horiz_split <session name> <window id> <directory>
# name_window <session name> <window id> <window name>
# run_command <session name> <window id> "<command>"
# run_command_left <session name> <window id> "<command>"
# run_command_right <session name> <window id> "<command>"
# Создать новую отсоединенную сессию tmux, установить начальный каталог
create_session() {
tmux new-session -d -s ${1} -c ${2}
}
# Присоединиться к сессии tmux
attach_session() {
tmux attach-session -t $1
}
# Создать новое окно tmux, установить начальный каталог
new_window() {
tmux new-window -t ${1}:${2} -c ${3}
}
# Создать новое окно tmux с горизонтальным разделением, установить начальный каталог
new_window_horiz_split() {
tmux new-window -t ${1}:${2} -c ${3}
tmux split-window -h -t ${1}:${2}
}
# Переименовать окно tmux
name_window() {
tmux rename-window -t ${1}:${2} ${3}
}
# Выполнить команду tmux
run_command() {
tmux send-keys -t ${1}:${2} "${3}" C-m
}
# Выполнить команду tmux в левой панели
run_command_left() {
tmux send-keys -t ${1}:${2}.0 "${3}" C-m
}
# Выполнить команду tmux в правой панели
run_command_right() {
tmux send-keys -t ${1}:${2}.1 "${3}" C-m
}
Вот скрипт, который открывает три окна (одно из которых имеет горизонтально разделенные панели), называет их, выполняет команды, а затем присоединяется…
#!/bin/bash
source tmux_utils # включить утилитарные функции
SES="my_project" # имя сессии
DIR="${HOME}/Git/my_project" # базовый каталог проекта
create_session $SES $DIR # создать отсоединенную сессию
new_window $SES 1 $DIR
new_window_horiz_split $SES 2 ${DIR}/src
# Встроенные флаги в вышеуказанных командах для следующих действий
# похоже, не работают при многократном запуске из bash-скрипта,
# вероятно, из-за состояния гонки. Дайте им немного времени для окончания.
sleep 0.1
name_window $SES 0 main
run_command $SES 0 "ls -lh"
name_window $SES 1 readme
run_command $SES 1 "vim README.md"
name_window $SES 2 src
run_command_left $SES 2 "vim main.c"
run_command_right $SES 2 "ls -lh"
attach_session $SES
Ответ или решение
Скриптинг с использованием tmux может быть невероятно мощным инструментом для автоматизации и повышения эффективности вашей работы в терминале. Если у вас есть задачи, которые требуют параллельного или последовательного выполнения нескольких команд Bash или sh в отдельных панелях tmux, правильная настройка и автоматизация этого процесса позволит вам сэкономить время и избежать повторяющихся ручных действий.
Теория
tmux (от "terminal multiplexer") — это инструмент, позволяющий управлять несколькими терминальными сессиями внутри одного окна терминала. Это особенно полезно для разработчиков и системных администраторов, которые работают с множеством процессов и команд на одном экране.
Одной из сильных сторон tmux является возможность создавать скрипты для автоматизации запуска сессий и окон, настройки компоновки панелей и выполнения команд. Это позволяет однажды настроить рабочее окружение и затем воспроизводить его впоследствии, что особенно полезно в проектах с повторяющейся структурой работы.
Пример
Рассмотрим типичный сценарий: вам необходимо запустить несколько команд в разных панелях tmux, чтобы мониторить логи, запускать серверы или управлять различными этапами разработки. Например, у вас есть пять разных команд, которые необходимо запускать в отдельных панелях и вы хотите, чтобы каждый раз при запуске сценария tmux автоматически выполнял вашу настройку.
Обратите внимание на следующий пример использования скриптов tmux для выполнения этой задачи:
-
Создание базового скрипта:
- Создайте шеловский скрипт с помощью любого текстового редактора и назовите его, например
setup_tmux.sh
.
- Создайте шеловский скрипт с помощью любого текстового редактора и назовите его, например
-
Скрипт для создания сессии и окон:
- Первый шаг в скрипте — создание новой сессии:
#!/bin/bash tmux new-session -d -s my_session -c ~/my_project
- Первый шаг в скрипте — создание новой сессии:
-
Добавление окон и панелей:
- Создайте новое окно и добавьте к нему панель:
tmux new-window -t my_session:1 -c ~/my_project tmux split-window -h -t my_session:1
- Создайте новое окно и добавьте к нему панель:
-
Запуск команд:
- В каждом окне или панели запустите нужные команды:
tmux send-keys -t my_session:1.0 "tail -f /var/log/syslog" C-m tmux send-keys -t my_session:1.1 "htop" C-m
- В каждом окне или панели запустите нужные команды:
-
Автоматическое подключение к сессии:
- В завершение, подключитесь к созданной сессии:
tmux attach-session -t my_session
- В завершение, подключитесь к созданной сессии:
Этот пример показывает основу, на которой можно строить более сложные сценарии, например, добавляя более сложные компоновки панелей и более широкий спектр команд, которые потребуются для повседневной работы.
Применение
Теперь рассмотрим, как можно применять этот метод в повседневной работе и над чем следует задуматься при создании скриптов для tmux.
-
Специализированная настройка для проектов:
- Если вы работаете над многими проектами с различными требованиями к среде разработки (например, вам нужно следить за различными логами, запустить сервера разработки и тестирования), вы можете создать скрипт настройки для каждого проекта. Это позволит быстро и безошибочно разворачивать рабочее окружение.
-
Управление системными задачами:
- Администрирование серверов часто требует одновременного выполнения множества команд. Настраивайте панели для мониторинга ресурсов, логов, ошибок, что упростит вашу работу.
-
Учебные и учебные среды:
- Если вы проводите образовательные курсы или обучаете новых сотрудников, вы можете создать скрипты для подготовки сессий, что позволит сосредоточиться на учебном материале, а не на технической настройке.
В заключении, tmux — это инструмент, который, благодаря возможности скриптинга, позволяет добиться невероятных высот в автоматизации и оптимизации вашей работы в терминале. Этот подход требует начальных затрат времени на настройку, но окупается многократно за счет увеличения эффективности повседневных задач.