Como posso saber o nome da sessão tmux atual, executando o comando tmux

Como posso saber o nome da sessão tmux atual, executando o comando tmux

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 -popção de display-messageenviar 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-leftopçã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:

  1. a sessão de terminal atual não faz parte de uma sessão tmux, ou
  2. 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 -vnã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/nulle 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.

informação relacionada