Respuestas:
Con tmux 1.2 (y posterior), puede usar la -p
opción de display-message
enviar un mensaje a stdout (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 del manual).
Me sorprende que, después de casi 5 años, nadie haya señalado que ninguna de estas respuestas sea adecuada. Si bien ambos funcionan bien siempre y cuando el TTY actual esté conectado a la única sesión tmux en el host, estas respuestas no funcionan si:
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, el resultado es probablemente indeterminado o dará como resultado múltiples respuestas.
La pregunta correcta debería ser: "¿Cuál es el nombre de la sesión tmux a la que está conectada mi sesión de terminal actual?"
Para que él responda a esa pregunta, ejecute:
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 de tmux (adjuntas o no) e independientemente de si la sesión de terminal actual es o no parte de una sesión de tmux.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
para enumerar los paneles de cada sesión. No estoy seguro de qué tan nuevo -a
es, así que YMMV.
TMUX
la variable de entorno de comprobación antes de ejecutar tmux display-message -p '#S'
una configuración de escritorio típica.
Extendido / corregido respuesta de Tim-pueblos
de acuerdo con el comentario de don_crissti
en ¿Por qué esta grep -v
no está funcionando como se esperaba? .
Comando "$ (tty)" en la respuesta de tim-people
El | grep "$ (tty)" |
no funcionaría en ese contexto como se esperaba. Se evalúa como una cadena 'no un tty'.
Reemplazarlo con una variable resuelve este problema.
tty = $ (tty)
...
El | grep "$ tty" |
Además, cuando no existen sesiones tmux, el código original produciría
Mensaje de error "no se ejecuta ningún servidor en / tmp / tmux-1000 / default" .
Agregar 2>/dev/null
y el código se ejecutará sin imprimir el mensaje de error.
El código modificado se lee como:
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}'
tty
.En cambio, descubrí que esto funciona con precisión para mí:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi