Как выполнить команду очистки на сервере 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
, Теперь очистка будет происходить автоматически для сеанса А тогда и только тогда, когда сеанс был полностью закрыт.