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.
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.
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).
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 :
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.
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}'
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
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.