4

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

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

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

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

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

1 ответ1

6

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .