2013-07-03 132 views
2

我加入以下我.zshrc使TMUX將創建一個新的,或通過SSH登錄時附加到現有的會話時:結束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。

我可以讓它在tmux會話中的exit也會結束SSH會話嗎?更好:tmux中的exit只能分離tmux會話,然後結束SSH會話?

我在想,也許是zsh的別名,定義時[[ -n $TMUX ]],會做的伎倆,但我不知道什麼工作......

回答

3

運行TMUX時,您可以使用exec。它將完全控制你開始的工作,一旦該進程退出(即tmux,echols)shell將退出。

man zshbuiltinsexec ...將當前shell替換爲外部命令而不是分叉。

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 

的另一種方法是放置一個shell腳本啓動或加入TMUX,並要求ssh到,而不是運行你的shell。

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

(腳本顯然必須位於你的遠程主機)

+0

完美!謝謝:)爲''exec'讓它遠程客戶端不可知論,只要我不必記得做遠程命令。 – Xophmeister