
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 -p
opción para display-message
enviar un mensaje a la salida estándar (en lugar de mostrarlo a un cliente adjunto):
tmux display-message -p '#S'
#S
tiene el formato del nombre de la sesión (consulte la descripción de la status-left
opció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:
- la sesión de terminal actual no es parte de una sesión tmux, o
- 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 -v
no 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/null
y 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.