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

时间:2011-12-15 10:44:52

标签: shell tmux

典型情况可能是:

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

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

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

3 个答案:

答案 0 :(得分:179)

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

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

要在 tmux 的第二级实例中触发 c 绑定(new-window),您需要输入 Cb Cb c 。对于 tmux 的第三级实例,您可以键入 C-b C-b C-b C-b c

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

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

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


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

send-keys

在第二级 tmux 中创建新窗口: C-b C-c
在第三级 tmux 中创建新窗口: C-b C

答案 1 :(得分:39)

要访问内部,按住控制并按B键两次。

答案 2 :(得分:6)

编辑:

建议使用 C-q 作为绑定键,因为它是

的默认控制键命令
  

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

情况发生here,而@Paschalis提供了解决方案:

  

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

下面是答案:

为简单起见,请在~/.tmux.conf

中添加以下行
bind-key -n C-q send-prefix

然后您可以直接使用C-q作为远程tmux的bind-key。