Cómo iniciar tmux con adjuntar si existe una sesión


Respuestas:


52

La respuesta es mucho más simple. Solo pon esto en tu ~/.tmux.confarchivo:

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

Si ejecuta tmux attachy hay una sesión, se adjuntará a esa sesión (ya sea que esté adjunta o no). Si aún no hay una sesión, creará una para usted.


11
este es un buen truco, pero hay una advertencia: si tmuxse invoca sin argumentos, creará una nueva sesión y luego creará una segunda sesión tan pronto como llegue a esta línea en su ~/.tmux.conf. Puede ver este problema ejecutando tmux lsdespués de crear la primera sesión. En la práctica, después de poner esto en su archivo, ya no puede llamar tmuxsin argumentos
— Bruno Polaco

44
Por lo tanto, tendría que agregar un alias alias tmux="tmux attach"para evitar este problema
— rubo77

@BrunoPolaco: ¿cuál es la gran advertencia con una sesión tmux extra vacía que se ejecuta todo el tiempo (aparte de eso no se ve ordenada en la lista de tareas)?
— rubo77

@ Rubo77 Recursos. Algunas personas tienen algunas herramientas predeterminadas, ventanas, paneles, etc. creadas cuando se inician tmux.
— rovr138

129

Si nombrar su sesión está bien, entonces es fácil hacerlo con el new-sessioncomando:

tmux new-session -A -s main

dónde mainestá el nombre de la sesión que se adjuntará o creará si es necesario.

De man tmux:

El -Aindicador hace que se new-sessioncomporte como attach-sessionsi el nombre de sesión ya existe; en este caso, -Dse comporta como -da attach-session.

Tenga en cuenta también que la -Aopción se presenta en la versión tmux 1.8del 26 de marzo de 2013 , para versiones anteriores, use tmux attach || tmux.


10
+1 por usar la funcionalidad incorporada y proporcionar un fragmento de doc man
— Ari Patrick

1
En mi lista de alias: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". ¡Gracias por el consejo! Página del manual: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
— Jeroen Wiert Pluimers

tmux: unknown option -- AEsto solo parece estar disponible en versiones recientes.
— xApple

Este es el método que utilicé, pero ya no puedes usar "tmux detach". Debe usar el acceso directo <ctrl> b - d para guardar y salir de una sesión existente.
— Jess

2
[ -z "$TMUX" ] && exec tmux new -As .Esto es lo que uso en mi .bashrc.
— ryenus

30

Esto iniciará una nueva sesión si adjuntar da un error:

tmux attach || tmux new

Entonces un alias hará el trabajo:

tm="tmux attach || tmux new"

Incluso puede hacerlo más corto cambiando tmux attachparatmux a
— Bruno Polaco

Si bien esto es funcional, la solución de Wesley Baugh utiliza la funcionalidad incorporada de tmux para hacer lo mismo
— Ari Patrick

Ahora bien, esta parece ser la mejor respuesta para versiones anteriores, antes de que se introdujera -A (por ejemplo, v1.6)
— Christopher Peterson

3

Considere agregar lo siguiente a su .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

Puede ver mi uso de esto en mi archivo de recursos ZSH en mi repositorio de github


2

Para ampliar la respuesta de Wesley Baugh (que fue para mí dos sesiones de anidamiento cuando se usaba en .bashrc en los inicios de sesión) y agregar un poco de flexibilidad, ya que a menudo lo uso sudo -sen servidores (que cargaría mi .bashrc nuevamente y doble anidación), aquí está lo que tengo en mi .bashrc:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

Esto comprueba si hay una sesión tmux y se asegura de que no seas superusuario antes de crear una nueva sesión o adjuntarla a una existente llamada main.


1

Drew Frank respondió esto aquí: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

Aquí está el script que ahora uso para esto (sin embargo, volví a la pantalla debido a otro problema con tmux) /somewhere/on/your/path/ttmuxo como una función de shell:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

Las -2opciones hacen que tmux asuma un soporte de terminal de 256 colores, por lo que puede no ser apropiado para su situación.



1

Mejoré un poco la respuesta de @SuperMagic. Puse este bloque en la parte superior de mi.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
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.