关闭tmux会话时结束SSH会话

时间:2013-07-03 22:57:38

标签: ssh zsh tmux zshrc

我已将以下内容添加到.zshrc中,以便tmux在通过SSH登录时创建新会话或附加到现有会话:

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会话吗?

我认为可能是在[[ -n $TMUX ]]时定义的zsh别名,可以解决这个问题,但我不确定会起作用......

1 个答案:

答案 0 :(得分:3)

运行tmux时可以使用exec。它将完全控制您正在开始的工作,一旦该流程退出(tmuxechols),shell将退出。

man zshbuiltins 执行...用外部命令替换当前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

另一种方法是放置一个启动或加入tmux的shell脚本,并要求ssh运行它而不是你的shell。

 `alias tmux-ssh="ssh user@target-host -t /home/foo/my-tmux-script`

(该脚本显然必须位于您的远程主机上)