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 -popció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-sessionsmuestra 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"
tmuxsesión y en la otra estoy fuera de latmuxsesió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
tmuxclientes son susttynombres de sesión, pero sontmuxpropiedad del servidor y es lo mismo cuando miramos el nombre de la sesión desde dentro o fuera de untmuxcliente. A continuación, podemos usar eltmux info | headque 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
tmuxcliente o no cero si estamos ejecutando fuera de untmuxcliente. 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
tmuxcliente 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
printdeclaraciones y simplemente usar el código de salida si desea usar esto en un script de shell o algo así.fuente