Antworten:
Mit tmux 1.2 (und höher) können Sie die -p
Option verwenden display-message
, eine Nachricht an stdout auszugeben (anstatt sie einem angehängten Client anzuzeigen):
tmux display-message -p '#S'
#S
wird als Sitzungsname formatiert (siehe Beschreibung der status-left
Option in der Manpage).
Ich bin überrascht, dass nach fast fünf Jahren niemand darauf hingewiesen hat, dass keine dieser Antworten angemessen ist. Während beide einwandfrei funktionieren, solange das aktuelle TTY an die einzige tmux-Sitzung auf dem Host angehängt ist, fallen beide Antworten flach, wenn:
Im ersteren Fall geben beide Antworten hier den Namen der angehängten Sitzung zurück (unabhängig davon, ob das aktuelle tty von dieser Sitzung gesteuert wird). Im letzteren Fall ist das Ergebnis wahrscheinlich unbestimmt oder führt zu mehreren Antworten.
Die richtige Frage sollte lauten: "Wie heißt die tmux-Sitzung, an die meine aktuelle Terminalsitzung angehängt ist?"
Um diese Frage zu beantworten, führen Sie aus:
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}'
Dies funktioniert unabhängig von der Anzahl der TMUX-Sitzungen (angefügt oder anderweitig) und unabhängig davon, ob die aktuelle Terminalsitzung Teil einer TMUX-Sitzung ist oder nicht.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
Bereiche jeder Sitzung auflisten. Nicht sicher, wie neu -a
ist, also YMMV.
TMUX
Umgebungsvariablen kombiniert wird, bevor tmux display-message -p '#S'
ein typisches Desktop-Setup ausgeführt wird.
Erweiterte / korrigierten Antwort des tim-Völker
nach don_crissti Kommentar
zu Warum ist dies grep -v
nicht wie erwartet funktioniert? .
Befehl "$ (tty)" in der Antwort von tim-peoples
| grep "$ (tty)" |
würde in diesem Zusammenhang nicht wie erwartet funktionieren. Es wird eine Zeichenfolge 'not a tty' ausgewertet.
Das Ersetzen durch eine Variable löst dieses Problem.
tty = $ (tty)
...
| grep "$ tty" |
Wenn keine tmux-Sitzungen vorhanden sind, wird der ursprüngliche Code erstellt
"Kein Server läuft unter / tmp / tmux-1000 / default" Fehlermeldung.
Add 2>/dev/null
und der Code würde ausgeführt, ohne die Fehlermeldung auszudrucken.
Geänderter Code lautet wie folgt:
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
.Stattdessen stellte ich fest, dass dies für mich genau funktionierte:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi