tutorial commands comandos atajos tmux

commands - ¿Cómo enviar un comando a todos los paneles en tmux?



tmux linux tutorial (4)

¿Has intentado seguir en la ventana de tmux con varios paneles

Ctrl-B : setw synchronize-panes on clear history

Me gusta llamar :clear-history en paneles con un gran scrollback. Sin embargo, quiero crear un script para enviar este comando a todos los paneles en las distintas ventanas.

Sé cómo enviar un comando a todas las ventanas, por cortesía de esta question , pero ¿cómo puedo enviar un comando a todos los paneles de esa ventana también?

send-keys vienen a la mente send-keys y synchronize-panes de la página de manual de tmux, pero no estoy seguro de cómo casarlos juntos. Pero tal vez hay una manera más simple de hacer esto.

Observaciones adicionales:

Pensando un poco en esto, tmux list-panes -a parece listar todos los paneles en la sesión actual. Bastante útil para comenzar. ¿A donde voy desde aqui?


Llegué un poco tarde a la fiesta, pero no quería establecer y desarmar sincronize-panes solo para enviar un comando, así que creé una función de envoltura alrededor de tmux y agregué una función personalizada llamada send-keys-all-panes .

_tmux_send_keys_all_panes_ () { for _pane in $(tmux list-panes -F ''#P''); do tmux send-keys -t ${_pane} "$@" done }

También creo un contenedor alrededor del comando tmux para simplificar la llamada a esta función (por conveniencia). El contenedor y el código anterior están todos here .

Esto me permite ejecutar tmux send-keys-all-panes <command> o tmux skap <command para enviar <command> a todos los paneles.

Tenga en cuenta que tmux tiene un alias para mi función de contenedor tmux_pp.


Ninguna de las respuestas anteriores funcionó para mí (tmux v2.3), pero esto sí, desde la línea de comandos de bash:

for _pane in $(tmux list-panes -a -F ''#{pane_id}''); do / tmux clear-history -t ${_pane} ; done

Una secuencia de comandos más generalizada, para los comandos de tmux que no sean ''clear-history'' simplemente reemplazaría ese elemento con un parámetro, por ejemplo. $ 1. Tenga cuidado si tiene la intención de escribir un script para manejar una serie de comandos de tmux, ya que "-t $ {_ pane}" deberá aplicarse a cada uno.

Tenga en cuenta que se requiere el parámetro -a para tmux list-panes para cubrir todos los paneles en todas las ventanas en todas las sesiones. Sin eso, solo los paneles de tu ventana de tmux actual se verán afectados. Si tiene más de una sesión de tmux abierta y solo desea aplicar el comando a paneles dentro de la sesión actual, reemplace -a por -s (Todo está en la página man de tmux).

No tengo los puntos mod para comentar directamente sobre cada una de las respuestas anteriores, así que aquí está el por qué no me funcionaron:

El problema que tuve con la respuesta de @ shailesh-garg fue que la sincronización afectaba solo a los comandos emitidos dentro de los paneles, no a los comandos tmux emitidos con Ctrl-B : que están fuera de los paneles.

Los tres problemas que tuve con la respuesta de @kshenoy fueron que:

  1. envía pulsaciones de teclas dentro de un panel, no a la operación tmux de ese panel, por ejemplo, si uno tiene un shell bash ejecutándose en el panel y uno usa el script para enviar "clear-history", esas serían las teclas que aparecería en la línea de comando bash. Una solución alternativa sería enviar "tmux clear-history" o pre-pend "tmux" a "$ @", pero no he editado la respuesta debido a mis otros problemas con la respuesta;
  2. No pude entender cómo enviar un personaje de nueva línea sin literalmente romper la línea;
  3. Incluso cuando lo hice, enviar "tmux clear-history" no tuvo ningún efecto.

tmux send-keys -t <session id> <command> C-m

Reemplace la "identificación de sesión" y "comando" en consecuencia.