Wie erfahre ich den aktuellen tmux-Sitzungsnamen durch Ausführen des tmux-Befehls?

Wie erfahre ich den aktuellen tmux-Sitzungsnamen durch Ausführen des tmux-Befehls?

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 -pOption verwenden, um display-messageeine Nachricht an stdout auszugeben (anstatt sie einem angeschlossenen Client anzuzeigen):

tmux display-message -p '#S'

#Swird als Sitzungsname formatiert (siehe die Beschreibung der status-leftOption 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:

  1. die aktuelle Terminalsitzung ist nicht Teil einer tmux-Sitzung, oder
  2. 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 -vfunktioniert 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.

verwandte Informationen