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

sup*_*min 175 tmux

我在本地机器上打开了一个 tmux 会话,并通过 ssh 连接到远程机器。在此之后,我在远程机器上键入命令“tmux attach”,然后我在本地 tmux 会话上获得了一个远程 tmux 会话。

现在我想分离远程 tmux 会话,我试过了

C-b d
Run Code Online (Sandbox Code Playgroud)

但它分离了我的本地 tmux 会话而不是远程会话。

如何分离远程 tmux 会话?

Chr*_*sen 240

C-b C-b d
Run Code Online (Sandbox Code Playgroud)

(假设默认绑定)

第一个Cb由您的本地tmux解释(因为它是第一个看到您所有按键的人)。第二个Cb是一个命令,它使您的本地 tmux 将Cb发送到其活动窗格;这个生成的Cb到达远程tmux。所述d穿过本地TMUX不变; 当它到达远程tmux 时,它会触发detach命令。

  1. 你输入Cb
    您的本地tmux将其解释为前缀键;没有任何内容发送到在本地tmux下运行的进程。
  2. 你输入Cb
    您的本地tmux已将其绑定到该send-prefix命令。
    1. 您的本地tmuxCb发送到在活动窗格 ( ssh )中运行的进程。
    2. ssh将它(通过sshd等)转发到在远程端(远程tmux)上运行的进程。
      您的远程tmux将其解释为前缀键;没有任何内容发送到在远程tmux下运行的进程。
  3. 你输入d
    您的本地tmux正常通过它(因为第二个Cb完成了本地tmux的完整命令键序列)。
    您的远程tmux已绑定到detach-client;它分离活动客户端。

这与您需要向在tmux会话中运行的任何程序发送Cb时相同。如果你想送的Cb到正常的外壳(例如,因为您的外壳是用Emacs风格编辑,其中的Cb是(和你不喜欢使用箭头键)),您将需要使用的Cb的Cb得到一个单一的Cb的外壳。backward-char

  • 或者,我经常看到使用 ```Ca Ca``` 跳转到最后一个活动窗口。在这种情况下尝试```Ca ad``` 分离。谢谢! (9认同)
  • **注意**:我上面提到的组合只有在用户的 tmux.conf 中绑定了 ```a``` 键而不是 ```b``` 时才可用。 (2认同)

小智 66

另一种无需担心键绑定使其成为正确的 tmux 实例的方法是键入tmux detach远程 tmux 会话。


bob*_*bby 9

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

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

tmux attach

我进入tmux,看到另一个会话仍然附加

所以我分离了我当前的会话以返回到 shell: Ctrl + b; d

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

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

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