Como eu sei o nome da sessão tmux atual, executando o comando tmux

24

Estou escrevendo um script. Eu realmente quero saber disso. Espero que o executável do 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.

    
por Jimm Chen 08.04.2012 / 17:58

5 respostas

36

Com tmux 1.2 (e posterior), você pode usar a opção -p de display-message para 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 opção status-left na página man).

    
por 09.04.2012 / 06:07
4

Estou surpreso que, após quase 5 anos, ninguém tenha apontado que nenhuma dessas respostas é adequada. Enquanto ambos funcionam bem, contanto que o TTY atual esteja conectado à única sessão do tmux no host, essas respostas caem se:

  1. a sessão de terminal atual não faz parte de uma sessão do tmux ou
  2. existem várias sessões tmux anexadas

No primeiro caso, ambas as 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 múltiplas respostas.

A pergunta apropriada deve ser: "Qual é o nome da sessão do tmux à qual minha sessão de terminal atual está conectada?"

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 do tmux (anexadas ou não) e independentemente de a sessão de terminal atual ser ou não parte de uma sessão do tmux.

    
por 13.03.2017 / 01:15
4

Extensão resposta do tim-peoples estendida / corrigida de acordo com o comentário de don_crissti em Por que esse grep -v não está funcionando como esperado? .

Comando "$ (tty)" na resposta do tim-peoples

| grep "$(tty)" |

não funcionaria nesse contexto como esperado. Ele avalia uma string 'not a 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 em execução na mensagem de erro / tmp / tmux-1000 / default" .

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}'
    
por 24.04.2017 / 13:16
1

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.

    
por 09.04.2012 / 04:16
0
  • A resposta de Chris Johnsen retorna um nome de sessão mesmo quando se pergunta de fora de um.
  • A resposta de
  • Bright Side e Tim Peoples 'assume tty .

Em vez disso, achei que isso funcionasse com precisão para mim:

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi
    
por 11.09.2018 / 10:24

Tags