Respostas:
Com o tmux 1.2 (e posterior), você pode usar a -p
opção de display-message
enviar uma mensagem para o stdout (em vez de exibi-la para um cliente conectado):
tmux display-message -p '#S'
#S
está formatado como o nome da sessão (consulte a descrição da status-left
opção na página de manual).
Estou surpreso que, após quase 5 anos, ninguém apontou que nenhuma dessas respostas é adequada. Enquanto os dois funcionam bem, desde que o TTY atual esteja anexado à única sessão do tmux no host, essas respostas ficam fracas se:
No primeiro caso, as duas respostas aqui relatam o nome da sessão anexada (independentemente de o tty atual ser governado por essa sessão). Neste último caso, o resultado é provavelmente indeterminado ou resultará em várias respostas.
A pergunta correta deve ser: "Qual é o nome da sessão tmux à qual minha sessão de terminal atual está anexada?"
Para ele responder a essa pergunta, execute:
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}'
Isso funciona independentemente do número de sessões tmux (anexadas ou não) e independentemente de a sessão atual do terminal ser ou não parte de uma sessão tmux.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
para listar os painéis de todas as sessões. Não tenho certeza de quão novo -a
é, então YMMV.
TMUX
variável de ambiente antes da execução tmux display-message -p '#S'
de uma instalação típica da área de trabalho.
Extensão / corrigido resposta de Tim-povos
conforme o comentário de don_crissti
on Porque é que este grep -v
não está funcionando como esperado? .
Comando "$ (tty)" na resposta dos tim-people
| grep "$ (tty)" |
não funcionaria nesse contexto conforme o esperado. Ele avalia como uma string 'não um tty'.
Substituí-lo por uma variável resolve esse problema.
tty = $ (tty)
...
| grep "$ tty" |
Além disso, quando não existem sessões tmux, o código original produziria
Mensagem de erro "nenhum servidor em execução no / tmp / tmux-1000 / default" .
Adicione 2>/dev/null
e o código seria executado sem imprimir a mensagem de erro.
O código modificado é lido como:
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
.Em vez disso, achei que isso funcionava corretamente para mim:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi