如何分离已经在 tmux 中的 tmux 会话?

如何分离已经在 tmux 中的 tmux 会话?

我在本地计算机上打开了 tmux 会话,并通过 ssh 连接到远程计算机。之后,我tmux attach在远程计算机上输入内容,然后在本地 tmux 会话上获得了远程 tmux 会话。

现在我想脱离远程 tmux 会话,我已经尝试过CTRL+B D但它脱离的是我的本地 tmux 会话而不是远程会话。

我如何分离远程 tmux 会话?

答案1

CTRL+ B CTRL+B D

(假设默认绑定)

第一个CTRL+B由您的本地tmux(因为它是第一个看到你所有击键的命令)。第二个CTRL+是一个命令,它使你的本地 tmux向其活动窗格B发送一个CTRL+ ;这个生成的+到达远程BCTRLBtmux.D经过当地tmux不变;当它到达遥控器时tmux它触发detach命令。

  1. 您输入CTRL+ B
    您的本地tmux将其解释为前缀键;不会向在本地运行的进程发送任何内容tmux
  2. 您输入CTRL+ B
    您的本地tmux是否已将其绑定到send-prefix命令。
    1. 您当地的tmux向活动窗格中运行的进程发送CTRL+ (B远程控制)。
    2. 远程控制转发(通过sshd等)到远程端(远程tmux
      您的遥控器tmux将其解释为前缀键;不会向远程运行的进程发送任何内容tmux
  3. 您输入D
    您的本地tmux正常通过(因为第二个CTRL+B完成了本地的完整命令键序列tmux
    您的遥控器tmux将其绑定到detach-client;它会分离活动客户端。

这与你需要CTRLBtmux会话。如果您想将CTRL+发送B到您的普通 shell(例如,因为您的 shell 使用 Emacs 样式的编辑,其中CTRL+Bbackward-char(并且您不喜欢使用箭头键)),您需要使用CTRL+ B CTRL+B将单个CTRL+发送B到 shell。

答案2

tmux detach另一种方法就是在远程 tmux 会话中输入,而不用担心键绑定是否正确。

答案3

我尝试了第一个答案,但没有成功。

通过执行以下操作,我能够获得我想要的结果:

tmux attach

我进入 tmux 并看到另一个会话仍然连接着

因此我分离了当前会话并返回到 shell:CTRL+B D

然后我发布了以下内容: tmux attach -d

这表示附加到默认会话,并分离当前附加的所有其他会话。请参阅手册页客户端和会话

附加会话[-dr] [-t target-session](别名:attach)如果从 tmux 外部运行,则在当前终端中创建一个新客户端并将其附加到 target-session。如果从内部使用,则切换当前客户端。 如果指定了 -d,则连接到该会话的任何其他客户端都将被分离。 -r 表示客户端是只读的(只有绑定到 detach-client 命令的键才有效)

答案4

我更喜欢tmux detach,因为它是一个命令,所以不需要键盘。

相关内容