
Estou escrevendo um roteiro. Eu realmente quero saber isso. Espero que o executável tmux possa me dizer isso.
eu acho
tmux rename <newname>
pode renomear a sessão atual. Mas não consigo encontrar um comando para buscar seu próprio nome.
Responder1
Comtmux1.2 (e posteriores), você pode usar a -p
opção de display-message
enviar uma mensagem para stdout (em vez de exibi-la para um cliente anexado):
tmux display-message -p '#S'
#S
é formatado como o nome da sessão (veja a descrição da status-left
opção na página man).
Responder2
Estou surpreso que, depois de quase cinco anos, ninguém tenha apontado que nenhuma dessas respostas é adequada. Embora ambos funcionem bem, desde que o TTY atual esteja anexado à única sessão tmux no host, essas respostas falham se:
- a sessão de terminal atual não faz parte de uma sessão tmux, ou
- existem várias sessões tmux anexadas
No primeiro caso, ambas as respostas aqui reportam o nome da sessão anexada (independentemente de o tty atual ser governado por essa sessão). Neste último caso, o resultado provavelmente será indeterminado ou resultará em respostas múltiplas.
A pergunta adequada deveria ser: "Qual é o nome da sessão tmux à qual minha sessão de terminal atual está anexada?"
Pois ele responde aquepergunta, 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 do tmux (anexadas ou não) e independentemente de a sessão do terminal atual fazer ou não parte de uma sessão do tmux.
Responder3
Estendido/corrigidoresposta do tim-people
conformeComentário de don_crissti
sobrePor que isso grep -v
não está funcionando conforme o esperado?.
Comando "$(tty)" emresposta do tim-people
| grep "$(tty)" |
não funcionaria nesse contexto como esperado. Ele é avaliado 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
"nenhum servidor rodando em /tmp/tmux-1000/default"mensagem de erro.
Adicione 2>/dev/null
e o código será 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}'
Responder4
Não é o ideal, mas você pode extrair o nome da sessão anexada com awk
:
tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'
O formato personalizado é um pouco mais fácil de analisar do que o padrão.