如何在另一个tmux会话中打开tmux会话时发送命令?

Kri*_*ris 128 shell tmux

典型情况可能是:

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 
Run Code Online (Sandbox Code Playgroud)

我打开一个tmux会话,然后ssh到服务器并附加到现有的tmux会话.此时我在另一个内部有一个tmux会话.如何将命令发送到内部tmux会话?

注意:两个tmux会话都具有相同的键绑定.

Chr*_*sen 197

send-prefix命令可用于将前缀击键发送到活动窗格(正在运行的进程).默认情况下,前缀为Cb并且Cb绑定到send-prefix(因此命中它两次会将单个Cb发送到活动窗格).这正是我们访问内部tmux实例的绑定所需要的.

第一个Cb被"外部" tmux实例捕获为其前缀密钥.第二个由"外部" tmux实例捕获并触发其Cb绑定(send-prefix).这会将Cb发送到外部实例的活动窗格.在此窗格中运行的进程(最终通过ssh实例)是"内部" tmux实例.它捕获Cb作为其前缀键.现在,您的下一个击键将通过外部tmux实例传递,并由内部实例捕获以触发绑定.

要在tmux的第二级实例中触发c binding(new-window),可以键入Cb Cb c.对于tmux的第三级实例,您可以键入Cb Cb Cb Cb c.

如果你经常处理多层tmux,那么每个级别的加倍可能很烦人.如果你可以省去其他一些密钥,你可以制作一个非前缀的绑定,使(可能)更容易输入:

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix
Run Code Online (Sandbox Code Playgroud)

在二级tmux中 创建新窗口:C-\c
在第三级tmux中创建新窗口:C- ^ c(或C-\C-\c)


如果您希望(轻松)发送到较低级别的tmux实例的tmux命令数量有限,则可以使用创建一些特定绑定(可能只在您的顶级tmux实例中):send-keys

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c
Run Code Online (Sandbox Code Playgroud)

在第二级tmux中 创建新窗口:Cb Cc
在第三级tmux:Cb C中创建新窗口


tho*_*iha 43

要访问内部,按住控件并按B键两次.


qun*_*qun 6

编辑:

建议C-q用作绑定键,因为它是一个默认的控制键命令

取消冻结屏幕并继续显示屏幕

这种情况发生在这里,而@Paschalis提供了一个解决方案:

如果它恰好是两次不幸(带有Cq作为前缀的远程tmux会话):输入Cltr-q,然后:输入tmux:send-keys C-q

下面是答案:


为简单起见,请在您的帐号中添加以下内容 ~/.tmux.conf

bind-key -n C-q send-prefix
Run Code Online (Sandbox Code Playgroud)

然后,您可以直接使用C-q远程tmux的bind-key.