Substituindo o tmux pelo exec

6

Estou usando o tmux há algum tempo e estou muito feliz com isso. Desde que eu preciso na maioria das vezes, eu fiz o meu shell padrão (no guake, para ser preciso).

Isso é legal e estou perfeitamente bem com isso.

Mas, de tempos em tempos, eu preciso sair do tmux e ter um shell limpo, mas como o padrão é o tmux, encerrar a sessão resultará em outro tmux mais tarde.

Então, minha pergunta é: é possível substituir o processo tmux por um determinado shell?

Algo como exec que, obviamente, não funciona, porque substitui o shell dentro do tmux e não o próprio tmux.

    
por AkiRoss 07.03.2013 / 16:48

2 respostas

2

Eu não acho que o tmux possa fazer isso. Deve ser fácil de corrigir, se você sabe programação em C.

Uma coisa que você pode fazer é chamar o tmux a partir de um script de shell do wrapper e deixar que o script decida se deseja sair ou não. Envie um sinal ao invólucro para dizer a ele para executar um shell interativo quando o tmux sair. Aqui está uma prova de conceito não testada para o script wrapper:

export TMUX_PARENT_PID=$$
trap 'exec bash -i' USR1
tmux

Em ~/.tmux.conf :

update-environment DISPLAY WINDOWID SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION TMUX_PARENT_PID

De dentro do tmux, para obter um prompt de shell depois de desanexar:

TMUX_PARENT_PID=$(tmux show-environment | sed -n 's/^TMUX_PARENT_PID=//p')
kill -USR1 $TMUX_PARENT_PID
tmux detach-client
    
por 08.03.2013 / 01:47
0

Se o tmux estiver rodando, a variável de ambiente TMUX seria configurada, colocando linhas como essa em seu bashrc, o tmux ainda seria seu shell.

Mas se ele já estiver rodando, o bash ou outro shell rodará normalmente, (não use o chsh para configurar seu shell para o tmux, isso pode ser um problema)

if [[ ! -z ${TMUX} ]]; then
    // run tmux
    tmux "$@"
    exit 0
fi
// tmux is already running
    
por 08.03.2013 / 00:52