Как отправлять команды при открытии сеанса tmux внутри другого сеанса tmux?

Типичная ситуация может быть:

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

Я открываю сеанс tmux, затем ssh на сервер и присоединяюсь к существующему сеансу tmux. На этом этапе у меня есть одна сессия tmux внутри другой. Как отправить команды во внутренний сеанс tmux?

Примечание. Оба сеанса tmux имеют одинаковые привязки клавиш.

Ответ 1

Команда send-prefix может использоваться для отправки нажатия клавиши префикса (в процессе работы) активной панели. По умолчанию префикс Cb и Cb привязан к send-prefix (так что его двойное нажатие отправляет одиночную Cb в активную панель). Это именно то, что нам нужно для доступа к привязкам внутреннего экземпляра tmux.

Первый C-b захватывается "внешним" экземпляром tmux в качестве его префиксного ключа. Второй захвачен "внешним" экземпляром tmux и запускает привязку C-b (send-prefix). Это отправляет C-b на активную панель внешних экземпляров. Процесс, выполняющийся в этой области (в конечном счете, через экземпляр ssh), является "внутренним" экземпляром tmux. Он захватывает C-b как его префиксный ключ. Теперь ваше следующее нажатие клавиши будет передано через внешний экземпляр tmux и захвачено внутренним, чтобы вызвать привязку.

Чтобы вызвать привязку c (new-window) в экземпляре tmux второго уровня, вы должны ввести 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

Ответ 2

Чтобы получить доступ к внутреннему, удерживайте управление и дважды нажмите B.

Ответ 3

EDIT:

Я НЕ рекомендую использовать C-q в качестве связующего ключа, так как это команда управления по умолчанию для

отключает экран и позволяет продолжить отображение экрана

Ситуация происходит здесь, а @Paschalis предоставляет решение:

если это бывает дважды неудачно (удаленный сеанс tmux с C-q в качестве префикса): Введите Cltr-q, затем : и введите в tmux: send-keys C-q

Ниже приведен ответ:


Чтобы сделать это простым, добавьте строку ниже в ~/.tmux.conf

bind-key -n C-q send-prefix

Затем вы можете напрямую использовать C-q в качестве связного ключа для вашего удаленного tmux.