
Ich schreibe ein Skript. Ich möchte das wirklich wissen. Ich hoffe, die ausführbare Datei tmux kann mir das sagen.
ich finde
tmux rename <newname>
kann die aktuelle Sitzung umbenennen. Aber ich kann keinen Befehl finden, um ihren eigenen Namen abzurufen.
Antwort1
Mittmux1.2 (und höher) können Sie die -p
Option verwenden, um display-message
eine Nachricht an stdout auszugeben (anstatt sie einem angeschlossenen Client anzuzeigen):
tmux display-message -p '#S'
#S
wird als Sitzungsname formatiert (siehe die Beschreibung der status-left
Option auf der Manpage).
Antwort2
Ich bin überrascht, dass nach fast 5 Jahren niemand darauf hingewiesen hat, dass keine dieser Antworten angemessen ist. Obwohl beide gut funktionieren, solange das aktuelle TTY an die einzige Tmux-Sitzung auf dem Host angeschlossen ist, sind diese Antworten beide wirkungslos, wenn:
- die aktuelle Terminalsitzung ist nicht Teil einer tmux-Sitzung, oder
- Es gibt mehrere angehängte Tmux-Sitzungen
Im ersten 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 zweiten Fall ist das Ergebnis wahrscheinlich unbestimmt oder führt zu mehreren Antworten.
Die richtige Frage sollte lauten: „Wie lautet der Name der Tmux-Sitzung, an die meine aktuelle Terminalsitzung angehängt ist?“
Denn er antwortet aufDasFrage, Ausführung:
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 (verbunden oder nicht) und unabhängig davon, ob die aktuelle Terminalsitzung Teil einer Tmux-Sitzung ist oder nicht.
Antwort3
Erweitert/korrigiertAntwort von tim-peoples
gemäßKommentar von don_crissti
AnWarum grep -v
funktioniert dies nicht wie erwartet?.
"$(tty)"-Befehl inAntwort von tim-peoples
| grep "$(tty)" |
würde in diesem Kontext nicht wie erwartet funktionieren. Es wird als Zeichenfolge „kein TTY“ ausgewertet.
Das Ersetzen durch eine Variable löst dieses Problem.
tty=$(tty)
...
| grep "$tty" |
Wenn keine tmux-Sitzungen vorhanden sind, erzeugt der ursprüngliche Code
„kein Server läuft auf /tmp/tmux-1000/default“Fehlermeldung.
Fügen Sie es hinzu 2>/dev/null
, und der Code wird ausgeführt, ohne die Fehlermeldung auszudrucken.
Der geänderte Code lautet:
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}'
Antwort4
Nicht ideal, aber Sie können den Namen der angehängten Sitzung wie folgt extrahieren awk
:
tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'
Das benutzerdefinierte Format ist etwas einfacher zu analysieren als das Standardformat.