Nazwa sesji jest przechowywana w zmiennej tmux#S
, aby uzyskać do niej dostęp w terminalu , możesz to zrobić
tmux display-message -p "#S"
Jeśli chcesz go użyć .tmux.conf
, to po prostu #S
. Zauważ, że -p
opcja wypisze wiadomość na standardowe wyjście, w przeciwnym razie wiadomość zostanie wyświetlona w linii statusu tmux .
Jeśli powyższe polecenie zostanie wywołane w ramach sesji, zwróci nazwę sesji. Jeśli zostanie wywołany poza dowolną sesją, nadal zwróci nazwę ostatniej wciąż działającej sesji. Nie mogłem znaleźć komendy tmux do sprawdzenia, czy jest ona w sesji, czy nie, więc musiałem wymyślić tę pracę:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
pokazuje wszystkie sesje, jeśli jedna jest dołączona, pokazuje (attached)
na końcu. Za pomocą sed pomijamy wszystkie dane wyjściowe (opcję -n
) oprócz tego, gdzie znajdujemy słowo kluczowe (attached)
, w tym wierszu odcinamy wszystko po znaku :
, co pozostawia nam nazwę sesji. W przeciwieństwie do mnie działa to w sesji i poza nią tmux display-message -p "#S"
.
Oczywiście działa to tylko wtedy, gdy w nazwie sesji nie ma ani :
nie (attached)
.
Jak skomentował Chris Johnsen , sposobem sprawdzenia, czy ktoś jest w sesji tmux, jest sprawdzenie, czy ustawiona jest jego zmienna środowiskowa:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
sesję, aw drugiej jestem pozatmux
sesją. Kiedy wpisuję oba z nichtmux display-message -p "#S"
, drukowany jest ten sam wynik, a zwracana wartość obu poleceń jest taka sama.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Spójrz tutaj , korzystając z tego postu zrozumiałem, że jedyną rzeczą, która wyróżnia
tmux
klientów, jest to,tty
że nazwy sesji sątmux
własnością serwera i są takie same, gdy patrzymy na nazwę sesji od wewnątrz lub na zewnątrztmux
klienta. Następnie możemy użyć,tmux info | head
który wyświetla pid i tty klienta oraz pid serwera.Następująca wartość zwracana przez komendę to 0, jeśli jesteśmy w
tmux
kliencie, lub niezerowa, jeśli działamy pozatmux
klientem. Jeśli uruchamiasz go ze skryptu, upewnij się, że używasz ppid zamiast $$, ponieważ tty jest powiązany z procesem powłoki, a nie z uruchomionym skryptem.Jednym prostym sposobem, ale mniej niezawodnym, aby dowiedzieć się, czy jesteśmy
tmux
klientem wewnętrznym, czy zewnętrznym, jest sprawdzenie zmiennej środowiskowej TERM. Wygląda na to, że poza klientem mówi „xterm”, ale wewnątrz mówi „ekran”. Jednak uważam, że pierwszy sposób jest znacznie lepszy.źródło
Oto skrypt perla; uczynienie z niego skryptu powłoki lub funkcji skryptu powłoki jest ćwiczeniem pozostawionym czytelnikowi.
Daje to następujące dane wyjściowe w sesji TMUX:
Poza sesją TMUX wygenerowałoby to:
Możesz porzucić
print
instrukcje i po prostu użyć kodu wyjścia, jeśli chcesz użyć tego w skrypcie powłoki lub coś takiego.źródło