¿Cómo enviar comandos al abrir una sesión de tmux dentro de otra sesión de tmux?


Una situación típica puede ser:

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

Abro una sesión de tmux, luego ssh en un servidor y adjunto a una sesión de tmux existente. En este punto tengo una sesión de tmux dentro de otra. ¿Cómo envío comandos a la sesión interna de tmux?

Nota: Ambas sesiones de tmux tienen los mismos enlaces de teclas.

 111
Author: Kris, 2011-12-15

3 answers

El comando send-prefix se puede usar para enviar su pulsación de prefijo al panel activo (el proceso que se ejecuta en). Por defecto, el prefijo es C-by C-b está enlazado a send-prefix (de modo que golpearlo dos veces envía un solo C-b al panel activo). Esto es justo lo que necesitamos para acceder a los enlaces de la instancia interna tmux.

La primera C-b es capturada por la instancia "externa" tmux como su clave de prefijo. El segundo es capturado por el "outer" tmux instance and triggers its C-b binding (send-prefix). Esto envía un C-b al panel activo de la instancia externa. El proceso que se ejecuta en este panel es (en última instancia, a través de una instancia ssh) la instancia "interna" tmux. Captura el C-b como su clave de prefijo. Ahora su próxima pulsación de tecla será pasada a través de la instancia externa tmux y capturada por la interna para activar un enlace.

Para activar el c binding (new-window) en una instancia de segundo nivel de tmux, escribirías C-b C-b c. Ante una tercera instancia de nivel tmux escriba C-b C-b C-b C-b c.

Esta duplicación para cada nivel puede ser molesto si usted está tratando comúnmente con múltiples capas de tmux. Si puedes ahorrar alguna otra clave, podrías hacer un enlace sin prefijo para hacer las cosas (posiblemente) más fáciles de escribir:

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

Crear una nueva ventana en el segundo nivel tmux: C - \ c
Crear nueva ventana en el tercer nivel tmux: C-^ c (o - C\ C\ c)


Si tiene un número limitado de comandos tmux que desea enviar (fácilmente) a las instancias de nivel inferior tmux, puede usar send-keys para crear algunos enlaces específicos (posiblemente solo en su instancia de nivel superior tmux):

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

Crear una nueva ventana en el segundo nivel tmux: C-b C-c
Crear nueva ventana en el tercer nivel tmux: C-b C

 170
Author: Chris Johnsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 05:12:44

Para acceder al interior, mantenga el control y pulse B dos veces.

 34
Author: thouliha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 22:37:35

EDITAR:

Hago NO recomendar uso C-q como bind-key, ya que es un comando de control-key predeterminado para

Desbloquea la pantalla y permite que la pantalla continúe

Una situación sucede aquí , y @Paschalis proporciona una solución:

Si resulta ser dos veces desafortunado (una sesión remota de tmux con C-q como prefijo): Escriba Cltr-q, luego :, e ingrese en tmux: send-keys C-q

Debajo está el respuesta:


Para hacerlo simple, agregue la siguiente línea en su ~/.tmux.conf

bind-key -n C-q send-prefix

Entonces puedes directamente usar C-q como bind-key para tu tmux remoto.

 6
Author: qun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-30 09:39:00