如何分离一个本身已经在tmux中的tmux会话?
我在我的本地机器上打开了一个tmux会话,并通过ssh连接到远程机器。在这之后,我在远程机器上输入了 “tmux attach "命令,然后我在本地tmux会话上得到了一个远程tmux会话。
现在我想分离远程tmux会话,我试过
C-b d
但它分离的是我的本地tmux会话而不是远程会话。
_我怎样才能分离远程tmux会话?
我在我的本地机器上打开了一个tmux会话,并通过ssh连接到远程机器。在这之后,我在远程机器上输入了 “tmux attach "命令,然后我在本地tmux会话上得到了一个远程tmux会话。
现在我想分离远程tmux会话,我试过
C-b d
但它分离的是我的本地tmux会话而不是远程会话。
_我怎样才能分离远程tmux会话?
C-b C-b d
(假设默认绑定)
第一个C-b由你的本地tmux解释(因为它是第一个看到你所有按键的地方)。第二个C-b是一个命令,它使你的本地tmux发送一个C-b到它的活动窗格;这个生成的C-b到达远程tmux。该d通过本地tmux时没有变化;当它到达远程tmux时,会触发detach
命令。
1.你输入C-b。
你的本地 tmux 将其解释为前缀键;没有任何内容被发送到本地 tmux 下运行的进程。
2. 你输入C-b。
你的本地 tmux 将它绑定到 send-prefix
命令。
1.你的本地 tmux 发送 C-b 到活动窗格 (ssh) 中运行的进程。
2. ssh将其转发(通过 sshd等)到远程端运行的进程(远程 tmux)。
你的远程tmux将其解释为前缀密钥;没有任何东西被发送到远程tmux下运行的进程。
3. 你输入d。
你的本地tmux正常通过(因为第二个C-b为本地tmux完成了一个完整的命令键序列)。
你的远程tmux将它绑定到detach-client
;它脱离了活动客户端。
这与你需要向运行在tmux会话内的任何程序发送C-b是一样的。如果你想把 C-b发送到你的普通shell(例如,因为你的shell使用Emacs风格的编辑,其中C-b是backward-char
(而且你不喜欢使用方向键)),你将需要使用C-b** C-b 来获得单个C-b**到shell。
另一种方法是在远程tmux会话中键入tmux detach
,而不用担心钥匙绑定到正确的tmux实例。
我试了第一个答案没有成功。
我做了以下操作,得到了我想要的结果。
tmux attach
我进入tmux,看到另一个会话还在连接着
于是我分离了我当前的会话,回到shell:Ctrl + b; d
然后我发出了以下命令:tmux attach -d
这说明要连接到默认会话,并分离当前连接的所有其他会话。请参阅Clients and Sessions
attach-session [-dr] -t target-session 如果从tmux外部运行,在当前终端中创建一个新的客户端,并将其附加到target-session。如果从内部使用,则切换当前客户端。如果指定了 -d,则连接到该会话的任何其他客户端都会被分离。