2013-07-03 4 views
2

Я добавил следующее к моему .zshrc, так что tmux либо создать новый или прикрепить к существующей сессии при входе в систему через SSH:End SSH сессии при закрытии tmux сессии

if [[ -z $TMUX && -n $SSH_TTY ]]; then 
    me=$(whoami) 

    if tmux has-session -t $me 2>/dev/null; then 
    tmux -2 attach-session -t $me 
    else 
    tmux -2 new-session -s $me 
    fi 
fi 

Это, кажется, работает. Однако, если я выхожу из сеанса tmux, меня отправят обратно в zsh.

Могу ли я получить его так, чтобы exit в сеансе tmux также завершил сеанс SSH? Еще лучше: мог ли exit в tmux просто отсоединить сеанс tmux, а затем завершить сеанс SSH?

Я имею в виду, что может быть, ЗШ псевдоним, определенный при [[ -n $TMUX ]], будет делать трюк, но я не уверен, что будет работать ...

ответ

3

Вы можете использовать exec при запуске tmux. Это даст полный контроль над заданием, которое вы запускаете, как только этот процесс выйдет (будет tmux, echo или ls), оболочка выйдет.

От man zshbuiltinsexec ... Заменить текущую оболочку внешней командой, а не форкировкой.

if [[ -z $TMUX && -n $SSH_TTY ]]; then 
    me=$(whoami) 

    if tmux has-session -t $me 2>/dev/null; then 
    exec tmux -2 attach-session -t $me 
    else 
    exec tmux -2 new-session -s $me 
    fi 
fi 

другой альтернативы, чтобы поместить оболочку-скрипт, который запускает или соединяющую tmux, и попросить ssh бежать, что вместо вашей оболочки.

`alias tmux-ssh="ssh [email protected] -t /home/foo/my-tmux-script` 

(сценарий, очевидно, должен быть расположен на удаленном хосте)

+0

Отлично! Спасибо :) Пошел для 'exec', чтобы сделать его удаленным клиентом агностиком, поскольку мне не нужно помнить, что нужно делать удаленную команду. – Xophmeister

Смежные вопросы