¿Cómo sé el nombre de la sesión tmux actual ejecutando el comando tmux?

¿Cómo sé el nombre de la sesión tmux actual ejecutando el comando tmux?

Estoy escribiendo un guión. Realmente quiero saber esto. Espero que el ejecutable tmux pueda decirme esto.

Encuentro

tmux rename <newname>

puede cambiar el nombre de la sesión actual. Pero no puedo encontrar un comando para recuperar su propio nombre.

Respuesta1

Contmux1.2 (y posteriores), puede usar la -popción para display-messageenviar un mensaje a la salida estándar (en lugar de mostrarlo a un cliente adjunto):

tmux display-message -p '#S'

#Stiene el formato del nombre de la sesión (consulte la descripción de la status-leftopción en la página de manual).

Respuesta2

Me sorprende que, después de casi cinco años, nadie haya señalado que ninguna de estas respuestas es adecuada. Si bien ambos funcionan bien siempre que el TTY actual esté conectado a la única sesión tmux en el host, estas respuestas fracasan si:

  1. la sesión de terminal actual no es parte de una sesión tmux, o
  2. hay múltiples sesiones tmux adjuntas

En el primer caso, ambas respuestas aquí informan el nombre de la sesión adjunta (independientemente de si el tty actual se rige por esa sesión). En el último caso, es probable que el resultado sea indeterminado o dé lugar a múltiples respuestas.

La pregunta adecuada debería ser: "¿Cuál es el nombre de la sesión tmux a la que está adjunta mi sesión de terminal actual?"

Para él responder aesopregunta, ejecuta:

for s in $(tmux list-sessions -F '#{session_name}'); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'

Esto funciona independientemente del número de sesiones tmux (adjuntas o no) y de si la sesión actual del terminal es o no parte de una sesión tmux.

Respuesta3

Ampliado/corregidoLa respuesta de Tim-Peoples. segúncomentario de don_crissti en¿Por qué esto grep -vno funciona como se esperaba?.

Comando "$(tty)" enLa respuesta de Tim-Peoples.

| grep "$(tty)" |

no funcionaría en ese contexto como se esperaba. Se evalúa como una cadena "no es un tty".

Reemplazarlo con una variable resuelve este problema.

tty=$(tty)

...

| grep "$ty" |

Además, cuando no existen sesiones tmux, el código original produciría

"no hay ningún servidor ejecutándose en /tmp/tmux-1000/default"mensaje de error.

Agregue 2>/dev/nully el código se ejecutará sin imprimir el mensaje de error.

El código modificado dice:

tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'

Respuesta4

No es ideal, pero puedes extraer el nombre de la sesión adjunta con awk:

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

El formato personalizado es un poco más fácil de analizar que el predeterminado.

información relacionada