【问题标题】:How to send commands when opening a tmux session inside another tmux session?在另一个 tmux 会话中打开 tmux 会话时如何发送命令?
【发布时间】:2012-01-21 01:46:04
【问题描述】:

典型的情况可能是:

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

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

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

【问题讨论】:

  • 不是编程问题。请尝试superuser.com。祝你好运。
  • 我很高兴提出要移动的问题,但是对于上下文,我在 tmux 中使用 vim 进行编码,当然经常需要通过 ssh 连接到发生此问题的其他服务器。

标签: shell tmux


【解决方案1】:

编辑:

我确实建议使用 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 的绑定键。

【讨论】:

  • 如果有人更改了外部 tmux 中的默认 binder key,则必须在内部 tmux 中使用相同的默认 binder key,以上 sn-p 才能工作!
  • 我正在修改本地 tmux 的前缀(在我的情况下为 Ctrl+]),因此服务器上的所有“内部”tmux-es 都具有前缀的默认绑定
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    要在 tmux 的第二级实例中触发 c 绑定 (new-window),您需要输入 C-b C-b 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 命令数量有限,则可以改用 send-keys 来创建一些特定的绑定(可能只是在您的顶级 tmux 实例中):

    bind-key C-c  send-keys C-b c
    bind-key C    send-keys C-b C-b c
    

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

    【讨论】:

    • 此外,我必须注释掉我现有的last-window 绑定,因为它在执行C-a C-a 时被调用,例如:#bind-key C-a last-window。注意我的前缀是a,而不是默认的b
    • bind-key -n C-\ send-prefix 不起作用。我的 tmux 无法识别 \.当我使用字母时,它会起作用。
    • @Darksky:你使用的是什么版本的 tmux?它适用于 1.7、1.6 和 1.5。如果您从 shell 命令进行绑定(即tmux bind-key -n 'C-\' send-prefix),您肯定需要添加额外的引用级别;如果您在从~/.tmux.conf(或前缀: 命令行)运行它时遇到问题,那么您可以尝试类似的引用(即bind-key -n 'C-\' send-prefix)。
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 2021-10-09
    • 2015-06-15
    • 2021-03-08
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多