Risposte:
Con tmux 1.2 (e versioni successive), è possibile utilizzare l' -p
opzione di display-message
inviare un messaggio a stdout (invece di visualizzarlo su un client collegato):
tmux display-message -p '#S'
#S
è formattato come il nome della sessione (vedere la descrizione status-left
dell'opzione nella pagina man).
Sono sorpreso che, dopo quasi 5 anni, nessuno abbia sottolineato che nessuna di queste risposte è adeguata. Mentre entrambi funzionano bene fintanto che l'attuale TTY è collegato all'unica sessione tmux sull'host, queste risposte sono entrambe piatte se:
Nel primo caso, entrambe le risposte qui riportano il nome della sessione allegata (indipendentemente dal fatto che l'attuale tty sia governato da quella sessione). In quest'ultimo caso, il risultato è probabilmente indeterminato o si tradurrà in risposte multiple.
La domanda corretta dovrebbe essere: "Qual è il nome della sessione tmux a cui è collegata la mia sessione terminale corrente?"
Poiché risponde a quella domanda, esegui:
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}'
Funziona indipendentemente dal numero di sessioni tmux (allegate o meno) e indipendentemente dal fatto che la sessione terminale corrente sia o meno parte di una sessione tmux.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
per elencare i riquadri di ogni sessione. Non sono sicuro di quanto nuovo -a
, quindi YMMV.
TMUX
della variabile di ambiente prima dell'esecuzione tmux display-message -p '#S'
per una tipica installazione desktop.
Risposta di tim- people estesa / corretta
secondo il commento di don_crissti
su Perché questo grep -v
non funziona come previsto? .
Comando "$ (tty)" nella risposta di tim-peoples
| grep "$ (tty)" |
non funzionerebbe in quel contesto come previsto. Valuta una stringa "non una tty".
Sostituirlo con una variabile risolve questo problema.
tty = $ (TTY)
...
| grep "$ tty" |
Inoltre, quando non esistono sessioni di tmux, il codice originale verrebbe prodotto
Messaggio di errore "nessun server in esecuzione su / tmp / tmux-1000 / default" .
Aggiungi 2>/dev/null
e il codice verrebbe eseguito senza stampare il messaggio di errore.
Il codice modificato è il seguente:
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
.Invece, ho scoperto che questo funziona in modo accurato per me:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi