O nome da sessão é armazenado na variável tmux#S
, para acessá-lo em um terminal , você pode fazer
tmux display-message -p "#S"
Se você quiser usá-lo .tmux.conf
, é simplesmente #S
. Observe que a -p
opção imprimirá a mensagem no stdout, caso contrário, a mensagem será exibida na linha de status do tmux .
Se o comando acima for chamado dentro de uma sessão, ele retornará o nome da sessão. Se for chamado fora de qualquer sessão, ainda retornará o nome da última sessão ainda em execução. Não consegui encontrar um comando tmux para verificar, se um está dentro de uma sessão ou não, então tive que apresentar este trabalho:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
mostra todas as sessões, se houver uma anexada, é exibida (attached)
no final. Com sed , suprimimos toda a saída (opção -n
), exceto onde encontramos a palavra-chave (attached)
; nessa linha, cortamos tudo depois de a :
, o que nos deixa com o nome da sessão. Isso funciona para mim dentro e fora de uma sessão, ao contrário tmux display-message -p "#S"
.
Obviamente, isso funciona apenas se não houver :
e não (attached)
no nome da sessão.
Como comentado por Chris Johnsen , uma maneira de verificar se alguém está dentro de uma sessão tmux é ver se sua variável de ambiente está configurada:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
sessão e no outro estou fora datmux
sessão. Quando digito o comando para os doistmux display-message -p "#S"
, o mesmo resultado é impresso e o valor de retorno dos dois comandos é o mesmo.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Dê uma olhada aqui , usando este post, entendi que a única coisa que distingue os
tmux
clientes é a sua,tty
mas os nomes de sessão sãotmux
propriedade do servidor e é a mesma quando olhamos para o nome da sessão de dentro ou de fora de umtmux
cliente. Em seguida, podemos usar otmux info | head
que exibe o pid e tty do cliente e o pid do servidor.O seguinte valor de retorno do comando é 0 se estivermos dentro de um
tmux
cliente ou diferente de zero se estivermos executando fora de umtmux
cliente. Se você o estiver executando a partir de um script, certifique-se de usar ppid em vez de $$, pois o tty está associado ao processo do shell e não ao script que você está executando.Uma maneira fácil, mas menos robusta, de saber se estamos dentro ou fora do
tmux
cliente é observando a variável de ambiente TERM. Parece que fora do cliente diz 'xterm', mas dentro diz 'tela'. No entanto, acho a primeira maneira muito melhor.fonte
Aqui está um script perl; torná-lo um script de shell ou uma função de script de shell é um exercício deixado para o leitor.
Isso produz a seguinte saída em uma sessão do TMUX:
Fora de uma sessão do TMUX, ele produziria o seguinte:
Você pode abandonar as
print
instruções e apenas usar o código de saída, se quiser usá-lo em um shell script ou algo assim.fonte