Réponses:
Avec tmux 1.2 (et versions ultérieures), vous pouvez utiliser l' -p
option de display-message
sortie d'un message vers stdout (au lieu de l'afficher sur un client attaché):
tmux display-message -p '#S'
#S
est formaté comme nom de session (voir la description de l' status-left
option dans la page de manuel).
Je suis surpris que, après près de 5 ans, personne n'ait signalé qu'aucune de ces réponses n'est adéquate. Bien que les deux fonctionnent correctement tant que le TTY actuel est attaché à la seule session tmux sur l'hôte, ces réponses tombent à plat si:
Dans le premier cas, les deux réponses rapportent ici le nom de la session jointe (indépendamment du fait que le terminal actuel soit régi par cette session). Dans ce dernier cas, le résultat est probablement indéterminé ou donnera lieu à plusieurs réponses.
La bonne question devrait être: "Quel est le nom de la session tmux à laquelle ma session de terminal actuelle est attachée?"
Pour qu'il réponde à cette question, exécutez:
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}'
Cela fonctionne quel que soit le nombre de sessions tmux (attachées ou non) et que la session de terminal en cours fasse ou non partie d'une session tmux.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
pour répertorier les volets de chaque session. Je ne sais pas à quel point c'est nouveau -a
, alors YMMV.
TMUX
la variable d'environnement avant l'exécution tmux display-message -p '#S'
pour une configuration de bureau typique.
Extended / corriger la réponse de tim-peuples
selon le commentaire de don_crissti
sur Pourquoi est - ce grep -v
ne fonctionne pas comme prévu? .
Commande "$ (tty)" dans la réponse de tim-peuples
| grep "$ (tty)" |
ne fonctionnerait pas dans ce contexte comme prévu. Il évalue une chaîne «pas un tty».
Le remplacer par une variable résout ce problème.
tty = $ (tty)
...
| grep "$ tty" |
De plus, en l'absence de sessions tmux, le code d'origine produirait
Message d'erreur «aucun serveur exécuté sur / tmp / tmux-1000 / default» .
Ajouter 2>/dev/null
et le code s'exécuterait sans imprimer le message d'erreur.
Le code modifié se lit comme suit:
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
.Au lieu de cela, j'ai trouvé que cela fonctionnait correctement pour moi:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi