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?

Drew Frank
fuente

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
Drew Frank
fuente
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`

usuario1559834
fuente
¡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
Charles Witt
fuente
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.

tomberek
fuente
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.

Tamara Wijsman
fuente
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