42 votes

Comment savoir le nom de la session tmux actuelle en exécutant la commande tmux

Je suis en train d'écrire un script. Je veux vraiment savoir cela. J'espère que l'exécutable tmux pourra me dire cela.

Je trouve

tmux rename 

peut renommer la session actuelle. Mais je ne trouve pas de commande pour récupérer son propre nom.

59voto

Chris Johnsen Points 36743

Avec tmux 1.2 (et plus récent), vous pouvez utiliser l'option -p de display-message pour afficher un message sur stdout (au lieu de l'afficher sur un client attaché) :

tmux display-message -p '#S'

#S est formaté comme le nom de la session (voir la description de l'option status-left dans le manuel).

13voto

hilycker Points 21

Je suis surpris que, après près de 5 ans, personne n'ait souligné que aucune de ces réponses n'est adéquate. Bien que les deux fonctionnent bien tant que le TTY actuel est attaché à la seule session tmux sur l'hôte, ces réponses sont toutes deux insuffisantes si :

  1. la session terminal actuelle ne fait pas partie d'une session tmux, ou
  2. il existe plusieurs sessions tmux attachées

Dans le premier cas, les deux réponses ici renvoient le nom de la session attachée (indépendamment du fait que le TTY actuel soit géré par cette session). Dans le second cas, le résultat est probablement indéterminé ou donnera lieu à plusieurs réponses.

La question correcte devrait être : "Quel est le nom de la session tmux à laquelle ma session terminal actuelle est attachée ?"

Pour la réponse à 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 indépendamment du nombre de sessions tmux (attachées ou non) et indépendamment du fait que la session terminal actuelle fasse ou non partie d'une session tmux.

10voto

bright side Points 101

Réponse de tim-peoples étendue/corrigée conformément au commentaire de don_crissti sur Pourquoi ce grep -v ne fonctionne-t-il pas comme prévu?.

La commande "$(tty)" dans la réponse de tim-peoples

| grep "$(tty)" |

ne fonctionnerait pas dans ce contexte comme prévu. Il est évalué en tant que chaîne 'pas un tty'.

Le remplacer par une variable résout ce problème.

tty=$(tty)

...

| grep "$tty" |

De plus, lorsqu'aucune session tmux n'existe, le code original produirait

le message d'erreur "no server running on /tmp/tmux-1000/default".

Ajoutez 2>/dev/null et le code s'exécutera sans afficher 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}'

6voto

dset0x Points 2085
  • La réponse de Chris Johnsen renvoie un nom de session même lorsqu'on interroge de l'extérieur d'une.
  • La réponse de bright side et de Tim Peoples suppose un tty.

Au lieu de cela, j'ai trouvé que cela fonctionne correctement pour moi :

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi

2voto

chepner Points 6381

Pas idéal, mais vous pouvez extraire le nom de la session attachée avec awk :

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

Le format personnalisé est un peu plus facile à analyser que le format par défaut.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X