El nombre de la sesión se almacena en la variable tmux#S
, para acceder a ella en un terminal , puede hacer
tmux display-message -p "#S"
Si quieres usarlo .tmux.conf
, es simplemente #S
. Tenga en cuenta que la -p
opción imprimirá el mensaje en stdout; de lo contrario, el mensaje se mostrará en la línea de estado de tmux .
Si se llama al comando anterior dentro de una sesión, devuelve el nombre de la sesión. Si se llama fuera de cualquier sesión, aún devuelve el nombre de la última sesión en ejecución. No pude encontrar un comando tmux para verificar, si uno está dentro de una sesión o no, así que tuve que idear esta solución:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
muestra todas las sesiones, si hay una adjunta, se muestra (attached)
al final. Con sed , suprimimos toda la salida (opción -n
) excepto donde encontramos la palabra clave (attached)
, en esta línea cortamos todo después de un :
, lo que nos deja con el nombre de la sesión. Esto funciona para mí dentro y fuera de una sesión, a diferencia de tmux display-message -p "#S"
.
Por supuesto, esto funciona solo si no hay :
y no (attached)
en el nombre de la sesión.
Como comentó Chris Johnsen , una forma de verificar si uno está dentro de una sesión tmux es ver si su variable de entorno está configurada:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
sesión y en la otra estoy fuera de latmux
sesión. Cuando escribo en ambos el comandotmux display-message -p "#S"
, se imprime el mismo resultado y el valor de retorno de ambos comandos es el mismo.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Eche un vistazo aquí , usando esta publicación, entendí que lo único que distingue a los
tmux
clientes son sustty
nombres de sesión, pero sontmux
propiedad del servidor y es lo mismo cuando miramos el nombre de la sesión desde dentro o fuera de untmux
cliente. A continuación, podemos usar eltmux info | head
que muestra el pid y tty del cliente y el pid del servidor.El siguiente valor de retorno del comando es 0 si estamos dentro de un
tmux
cliente o no cero si estamos ejecutando fuera de untmux
cliente. Si lo está ejecutando desde un script, asegúrese de usar ppid en lugar de $$ ya que tty está asociado con el proceso de shell y no con el script que está ejecutando.Una manera fácil pero menos robusta de saber si estamos dentro o fuera del
tmux
cliente es mirar la variable de entorno TERM. Parece que fuera del cliente dice 'xterm' pero dentro dice 'pantalla'. Sin embargo, la primera forma me parece mucho mejor.fuente
Aquí hay un script perl; convertirlo en un script de shell o una función de script de shell es un ejercicio que le queda al lector.
Esto produce el siguiente resultado en una sesión TMUX:
Fuera de una sesión TMUX produciría lo siguiente:
Puede deshacerse de las
print
declaraciones y simplemente usar el código de salida si desea usar esto en un script de shell o algo así.fuente