Desanexe todos os outros terminais exceto o atual de uma sessão tmux

1

Existe uma maneira de desanexar todos os terminais de uma sessão tmux em execução, exceto a que estou realmente usando?

Parece um pouco estranho, mas o significado de fazer isso é manter uma camada de "persistência" na sessão remota do usuário final, garantindo ao mesmo tempo que o usuário esteja usando o sistema apenas em "um shell".

Conforme explicado aqui , é fácil criar sessões com base em nomes de usuários:

if [[ "$TMUX" == "" ]] &&
        [[ "$SSH_CONNECTION" != "" ]]; then
    # Attempt to discover a detached session and attach
    # it, else create a new session
    WHOAMI=$(whoami)
    if tmux has-session -t $WHOAMI 2>/dev/null; then
    tmux -2 attach-session -t $WHOAMI
    else
        tmux -2 new-session -s $WHOAMI
    fi
fi

Mas também quero garantir que o último terminal conectado seja o único que permanece anexado à sessão tmux do usuário.

Tem uma maneira de conseguir isso? Eu também aceito soluções baseadas em screen (ou outros multiplexadores);)

    
por nwildner 02.03.2017 / 13:08

1 resposta

4

Se eu entendi sua pergunta corretamente, a opção -d para attach-session faz o que você quer:

tmux -2 attach-session -d -t $WHOAMI

Isso é anexado à sessão de destino nomeada e desanexa todos os outros clientes.

Você pode fazer algo semelhante após a sessão ser anexada, com as opções detach-client -a e -t : nomeie o cliente com -t e adicione -a para separar todos os clientes do nome cliente.

screen também tem uma opção -d que faz a mesma coisa.

    
por 02.03.2017 / 13:17