Der Name der Sitzung wird in der Variablen tmux gespeichert #S
, auf die Sie in einem Terminal zugreifen können
tmux display-message -p "#S"
Wenn Sie es verwenden möchten .tmux.conf
, ist es einfach #S
. Beachten Sie, dass die -p
Option die Nachricht auf stdout druckt, andernfalls wird die Nachricht in der Statuszeile von tmux angezeigt .
Wenn der obige Befehl in einer Sitzung aufgerufen wird, gibt er den Namen der Sitzung zurück. Wenn es außerhalb einer Sitzung aufgerufen wird, wird weiterhin der Name der zuletzt noch ausgeführten Sitzung zurückgegeben. Ich konnte keinen tmux- Befehl finden, mit dem ich überprüfen konnte, ob sich einer in einer Sitzung befindet oder nicht. Daher musste ich folgende Lösung finden :
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
Zeigt alle Sessions an, wenn eine angehängt ist, wird diese (attached)
am Ende angezeigt. Mit sed unterdrücken wir alle Ausgaben (Option -n
), außer wo wir das Schlüsselwort (attached)
finden. In dieser Zeile schneiden wir nach a alles weg :
, was uns den Namen der Sitzung gibt. Dies funktioniert bei mir innerhalb und außerhalb einer Sitzung im Gegensatz zu tmux display-message -p "#S"
.
Dies funktioniert natürlich nur, wenn im Namen der Sitzung kein :
und kein vorhanden ist (attached)
.
Wie von Chris Johnsen kommentiert , besteht eine Möglichkeit, zu überprüfen, ob sich eine in einer tmux- Sitzung befindet , darin, zu überprüfen , ob die Umgebungsvariable gesetzt ist:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
Sitzung und in der anderen bin ich außerhalb dertmux
Sitzung. Wenn ichtmux display-message -p "#S"
beide Befehle eingebe , wird das gleiche Ergebnis gedruckt und der Rückgabewert beider Befehle ist der gleiche.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Werfen Sie einen Blick hier , mit diesem Beitrag habe ich verstanden , dass das Einzige , was die unterscheidet
tmux
Kunden die ihre isttty
aber Sitzungsnamen sindtmux
Servereigenschaft und ist das gleiche , wenn wir auf der Sitzung Namen von innerhalb oder außerhalb eines aussehentmux
Client. Als nächstes können wir verwenden,tmux info | head
was die PID und Tty des Clients und die PID des Servers anzeigt.Der folgende Befehlsrückgabewert ist 0, wenn wir uns innerhalb eines
tmux
Clients befinden, oder ungleich Null, wenn wir außerhalb einestmux
Clients ausgeführt werden. Wenn Sie es über ein Skript ausführen, stellen Sie sicher, dass Sie ppid anstelle von $$ verwenden, da das tty dem Shell-Prozess zugeordnet ist und nicht dem Skript, das Sie ausführen.Eine einfache, aber weniger robuste Methode, um zu wissen, ob wir innerhalb oder außerhalb des
tmux
Clients sind, besteht darin, die Umgebungsvariable TERM zu untersuchen. Es scheint, dass außerhalb des Clients "xterm" steht, innerhalb "screen". Allerdings finde ich den ersten Weg viel besser.quelle
Hier ist ein Perl-Skript; es zu einem Shell-Skript oder einer Shell-Skript-Funktion zu machen, ist eine Aufgabe, die dem Leser überlassen bleibt.
Dies erzeugt die folgende Ausgabe in einer TMUX-Sitzung:
Außerhalb einer TMUX-Sitzung würde Folgendes erzeugt:
Sie können die
print
Anweisungen verwerfen und einfach den Exit-Code verwenden, wenn Sie dies in einem Shell-Skript oder so etwas verwenden möchten.quelle