Odpowiedzi:
W tmux 1.2 (i nowszych) możesz użyć -p
opcji wypisaniadisplay-message
komunikatu na standardowe wyjście (zamiast wyświetlania go na dołączonym kliencie):
tmux display-message -p '#S'
#S
jest sformatowany jako nazwa sesji (zobacz opis status-left
opcji na stronie man).
Dziwi mnie, że po prawie 5 latach nikt nie zauważył, że żadna z tych odpowiedzi nie jest odpowiednia. Chociaż oba działają dobrze, o ile bieżący TTY jest dołączony do jedynej sesji tmux na hoście, obie te odpowiedzi nie działają, jeśli:
W pierwszym przypadku obie odpowiedzi podają tutaj nazwę dołączonej sesji (niezależnie od tego, czy bieżący tty jest zarządzany przez tę sesję). W tym drugim przypadku wynik jest prawdopodobnie nieokreślony lub spowoduje powstanie wielu odpowiedzi.
Prawidłowe pytanie powinno brzmieć: „Jak nazywa się sesja tmux, do której dołączona jest moja bieżąca sesja terminalowa?”
Aby odpowiedzieć na to pytanie, wykonaj:
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}'
Działa to niezależnie od liczby sesji tmux (dołączonych lub innych) i niezależnie od tego, czy bieżąca sesja terminalowa jest częścią sesji tmux, czy nie.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
do wyświetlenia listy paneli każdej sesji. Nie jestem pewien, jak nowy -a
jest, więc YMMV.
TMUX
zmiennej środowiskowej przed uruchomieniem tmux display-message -p '#S'
dla typowej konfiguracji pulpitu.
Rozszerzony / poprawione odpowiedź Tim-Peoples męska
zgodnie komentarzu don_crissti koszulka
na Dlaczego to grep -v
nie działa jak powinno? .
Komenda „$ (tty)” w odpowiedzi ludzi czasu
| grep „$ (tty)” |
nie działałby w tym kontekście zgodnie z oczekiwaniami. Zwraca wartość ciągu „nie tty”.
Zastąpienie go zmienną rozwiązuje ten problem.
tty = $ (tty)
...
| grep "$ tty" |
Ponadto, gdy nie istnieją sesje tmux, oryginalny kod wygeneruje
Komunikat o błędzie „Brak serwera działającego na / tmp / tmux-1000 / default” .
Dodaj, 2>/dev/null
a kod będzie działał bez drukowania komunikatu o błędzie.
Zmodyfikowany kod brzmi:
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
.Zamiast tego uważam, że działa to dla mnie dokładnie:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi