Как выполнить команду очистки на сервере tmux / при выходе из сеанса?

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

Есть ли способ автоматически выполнить команду при выходе из сервера tmux?

Требуемый рабочий процесс:

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

[edit] Сценарий, который я сейчас использую: https://github.com/WoLpH/dotfiles/blob/master/bin/tmx

1 ответ

Решение

На данный момент нет конкретного способа, чтобы tmux автоматически запускал команды, запускаемые detach или закрытие всех окон в сеансе. Тем не менее, так как у вас уже есть сценарий оболочки (я буду называть это tmux_wrapper), который открывает желаемый пользовательский сеанс, вы можете легко конвертировать этот скрипт для автоматизации очистки. Я сам делаю нечто очень похожее на это здесь, где я хотел разрешить вложенные сессии tmux, если я подключаюсь через ssh.

Так как вы имеете в виду пользовательский опыт, вам больше не нужно tmux attach .... или аналогичные команды, поэтому я буду предполагать, что вы всегда начинаете сеанс для проекта A чем-то вроде tmux_wrapper A, В вашей обертке вы, вероятно, есть строка, похожая на tmux new-session -s A, Здесь мы можем воспользоваться названием сессии A, Затем в конце вашей обертки вы можете иметь переключатель очистки, который активируется только в том случае, если сеанс больше не активен (то есть окна / панели больше не могут быть подключены).

Простой пример tmux_wrapper будет выглядеть примерно так:

#!/bin/sh

sess=$1

# test if the session has windows
is_closed(){ 
    n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
    [[ $n -eq 0 ]]
}

# either create it or attach to it
if is_closed ; then
  tmux new -s $sess
else
  tmux attach -t $sess
fi

# the session is now either closed or detatched
if is_closed ; then
    # perform cleanup here ...
fi

Запустите это как tmux_wrapper A, Теперь очистка будет происходить автоматически для сеанса А тогда и только тогда, когда сеанс был полностью закрыт.

Другие вопросы по тегам