Como executar um comando de limpeza na saída do servidor tmux / session?

4

Para melhorar um pouco o meu fluxo de trabalho, escrevi alguns scripts de wrapper para iniciar automaticamente alguns comandos quando quero trabalhar em um projeto. Quando terminar, no entanto, e limpe todas as abas do tmux para esta sessão específica, eu gostaria de matar alguns processos e limpar alguns arquivos.

Existe alguma maneira de executar automaticamente um comando ao sair do servidor tmux?

O fluxo de trabalho desejado:

  • execute o comando para criar um novo servidor tmux, abra alguns arquivos, inicie alguns aplicativos
  • trabalhe na sessão
  • desligue para trabalhar mais tarde
  • reconectar
  • quando todas as guias no servidor tmux estiverem fechadas e o servidor for destruído, execute um comando de limpeza

[edit] O script que eu uso atualmente: link

    
por Wolph 06.05.2013 / 14:24

1 resposta

6

Por enquanto, não existe uma maneira específica de o tmux executar automaticamente comandos disparados por detach ou fechar todas as janelas da sessão. No entanto, como você já tem um script de wrapper (eu chamarei isso de tmux_wrapper ) que abre a sessão personalizada desejada, é possível converter facilmente esse script para automatizar a limpeza. Eu faço algo muito semelhante a isso eu mesmo aqui , onde eu queria permitir sessões tmux aninhadas se eu estou anexando através de ssh.

Como você tem uma experiência personalizada em mente, não precisa mais de tmux attach .... ou de comandos semelhantes, portanto, assumirei que você sempre inicia a sessão do projeto A por algo como tmux_wrapper A . Em seu wrapper, você provavelmente tem uma linha semelhante a tmux new-session -s A . Aqui podemos aproveitar o nome da sessão A . Em seguida, no final do wrapper, você pode ter uma opção de limpeza que só é ativada se a sessão não estiver mais ativa (por exemplo, janelas / painéis não podem mais ser anexados).

Um exemplo simples tmux_wrapper seria algo como isto:

#!/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

Execute como tmux_wrapper A . Agora, a limpeza ocorrerá automaticamente para a sessão A se e somente se a sessão tiver sido completamente fechada.

    
por 09.05.2013 / 06:29