Le nom de la session est stocké dans la variable tmux#S
, pour y accéder dans un terminal , vous pouvez faire
tmux display-message -p "#S"
Si vous voulez l'utiliser .tmux.conf
, c'est tout simplement #S
. Notez que l' -p
option imprimera le message sur stdout, sinon le message s'affiche dans la ligne d'état tmux .
Si la commande ci-dessus est appelée dans une session, elle renvoie le nom de la session. S'il est appelé en dehors d'une session, il renvoie toujours le nom de la dernière session en cours d'exécution. Je n'ai pas pu trouver une commande tmux pour vérifier, si une est à l'intérieur d'une session ou non, j'ai donc dû trouver cette solution :
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
affiche toutes les sessions, si une est jointe, elle s'affiche (attached)
à la fin. Avec sed, nous supprimons toutes les sorties (option -n
) sauf là où nous trouvons le mot-clé (attached)
, sur cette ligne, nous supprimons tout après un :
, ce qui nous laisse le nom de la session. Cela fonctionne pour moi à l'intérieur et à l'extérieur d'une session, par opposition à tmux display-message -p "#S"
.
Bien sûr, cela ne fonctionne que s'il n'y a pas :
et non (attached)
au nom de la session.
Comme l'a commenté Chris Johnsen , un moyen de vérifier si l'on se trouve dans une session tmux est de voir si sa variable d'environnement est définie:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
session et dans l'autre je suis en dehors de latmux
session. Lorsque je tape la commande dans les deuxtmux display-message -p "#S"
, le même résultat est imprimé et la valeur de retour des deux commandes est la même.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Jetez un oeil ici , en utilisant ce post, j'ai compris que la seule chose qui distingue les
tmux
clients est leurtty
mais les noms de session sont latmux
propriété du serveur et sont les mêmes lorsque nous regardons le nom de la session de l'intérieur ou de l'extérieur d'untmux
client. Ensuite, nous pouvons utilisertmux info | head
qui affiche le pid et tty du client et le pid du serveur.La valeur de retour de commande suivante est 0 si nous sommes à l'intérieur d'un
tmux
client ou non nulle si nous fonctionnons à l'extérieur d'untmux
client. Si vous l'exécutez à partir d'un script, assurez-vous d'utiliser ppid au lieu de $$ car le tty est associé au processus shell et non au script que vous exécutez.Une manière simple mais moins robuste de savoir si nous sommes à l'intérieur ou à l'extérieur du
tmux
client est de regarder la variable d'environnement TERM. Il semble qu'à l'extérieur du client, il est dit «xterm», mais à l'intérieur, il dit «écran». Cependant, je trouve le premier moyen bien meilleur.la source
Voici un script perl; en faire un script shell ou une fonction de script shell est un exercice laissé au lecteur.
Cela produit la sortie suivante dans une session TMUX:
En dehors d'une session TMUX, cela produirait les éléments suivants:
Vous pouvez abandonner les
print
instructions et utiliser simplement le code de sortie si vous souhaitez l'utiliser dans un script shell ou quelque chose.la source