【问题标题】:End SSH session when closing tmux session关闭 tmux 会话时结束 SSH 会话
【发布时间】:2013-07-03 22:57:38
【问题描述】:

我已将以下内容添加到我的.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 别名可能会起作用,但我不确定什么会起作用...

【问题讨论】:

    标签: ssh zsh tmux zshrc


    【解决方案1】:

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

    来自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`
    

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

    【讨论】:

    • 完美!谢谢 :) 去找exec 让它与远程客户端无关,因为我不必记住执行远程命令。
    猜你喜欢
    • 2014-05-11
    • 2015-05-12
    • 2017-01-28
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多