Скриптинг с tmux?

Вопрос или проблема

Могу ли я скриптовать несколько инструкций 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 для выполнения этой задачи:

  1. Создание базового скрипта:

    • Создайте шеловский скрипт с помощью любого текстового редактора и назовите его, например setup_tmux.sh.
  2. Скрипт для создания сессии и окон:

    • Первый шаг в скрипте — создание новой сессии:
      #!/bin/bash
      tmux new-session -d -s my_session -c ~/my_project
  3. Добавление окон и панелей:

    • Создайте новое окно и добавьте к нему панель:
      tmux new-window -t my_session:1 -c ~/my_project
      tmux split-window -h -t my_session:1
  4. Запуск команд:

    • В каждом окне или панели запустите нужные команды:
      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
  5. Автоматическое подключение к сессии:

    • В завершение, подключитесь к созданной сессии:
      tmux attach-session -t my_session

Этот пример показывает основу, на которой можно строить более сложные сценарии, например, добавляя более сложные компоновки панелей и более широкий спектр команд, которые потребуются для повседневной работы.

Применение

Теперь рассмотрим, как можно применять этот метод в повседневной работе и над чем следует задуматься при создании скриптов для tmux.

  1. Специализированная настройка для проектов:

    • Если вы работаете над многими проектами с различными требованиями к среде разработки (например, вам нужно следить за различными логами, запустить сервера разработки и тестирования), вы можете создать скрипт настройки для каждого проекта. Это позволит быстро и безошибочно разворачивать рабочее окружение.
  2. Управление системными задачами:

    • Администрирование серверов часто требует одновременного выполнения множества команд. Настраивайте панели для мониторинга ресурсов, логов, ошибок, что упростит вашу работу.
  3. Учебные и учебные среды:

    • Если вы проводите образовательные курсы или обучаете новых сотрудников, вы можете создать скрипты для подготовки сессий, что позволит сосредоточиться на учебном материале, а не на технической настройке.

В заключении, tmux — это инструмент, который, благодаря возможности скриптинга, позволяет добиться невероятных высот в автоматизации и оптимизации вашей работы в терминале. Этот подход требует начальных затрат времени на настройку, но окупается многократно за счет увеличения эффективности повседневных задач.

Оцените материал
Добавить комментарий

Капча загружается...