2

我添加了以下内容,.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。

我可以让它exit在 tmux 会话中也结束 SSH 会话吗?更好的是:可以exit在 tmux 中分离 tmux 会话,然后结束 SSH 会话吗?

我在想,也许定义 when 的 zsh 别名[[ -n $TMUX ]]可以解决问题,但我不确定什么会起作用......

4

1 回答 1

3

您可以exec在运行 tmux 时使用。它将完全控制您正在启动的作业,一旦该进程退出(无论是tmux还是echols,shell 将退出。

From man zshbuiltins exec ... 用外部命令而不是分叉替换当前 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`

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

于 2013-07-04T08:17:35.340 回答