tmux equivalente de "pantalla -R"?


10

El tmux attachcomando actúa más como una combinación de screen -ry screen -x, primero, trata de adjuntarse a la sesión desconectada más recientemente y luego, si no hay ninguna disponible, se adjuntará a una sesión adjunta actualmente. Quiero emular el comportamiento de screen -R: primero intente adjuntar a una sesión separada, luego comience una nueva sesión si no hubo sesiones separadas. ¿Cuál es la mejor manera de lograr esto en tmux?

Respuestas:


12

Después de consultar a los asistentes de IRC, estoy seguro de que no hay un solo comando tmux que tenga este comportamiento. Afortunadamente, es bastante fácil emular usando el shell:

(tmux ls | grep -vq attached && tmux at) || tmux

Edición menor para silenciar la salida "no se pudo conectar al servidor: conexión rechazada" en caso de que esté iniciando una nueva sesión:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
— l8nite

3

A pesar de lo que dice en el manual de tmux:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

La respuesta de Drew no funcionará correctamente en una situación como:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux atse adjuntará a la última sesión (# 1) (a pesar de que esta sesión todavía está adjunta en otro lugar). Esto arruina la idea de ejecutar varias sesiones de tmux y conectarlas solo a una separada (para usar mosh + tmux + iterm2 para crear un terminal de itinerancia perfecto).

Otro enfoque sería seleccionar manualmente una sesión no adjunta:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


¡Buena atrapada! La documentación no está sincronizada con el comportamiento real. Creé un informe de error para esto.
— Drew Frank el

Hay un parche que soluciona esto, por lo que para la próxima versión debería comportarse como se anuncia.
— Drew Frank el

¿Está el parche en 1.8?
— momeara

2

Tiendo a tener solo dos sesiones tmux a la vez, así que hago algo como esto en cada ventana de terminal.

ventana de terminal 0:

tmux attach -t 0 || tmux new

ventana de terminal 1:

tmux attach -t 1 || tmux new

2

Esto ha funcionado mejor para mí:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

El -t es necesario para adjuntar a la sesión adecuada.


1

Qué pasa

tmux attach || tmux new

o simplemente cree el archivo ~/.tmux.confsi no existe y agregue

new-session

para que cree una nueva sesión cuando no hay ninguna cuando se ejecuta tmux attach.

También podría ser útil hacer tmuxun alias tmux attach.


La primera propuesta se adjuntaría a las sesiones tmux adjuntas actualmente (similar a screen -x), que es algo que quiero evitar. La segunda propuesta exhibe este mismo problema y también tiene la consecuencia indeseable de crear sesiones tmux "extra" cuando uso el comando tmux source-file para recargar la configuración.
— Drew Frank el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.