Eu tenho um script bash:
#!/bin/bash
export TEST=$1
tmux new-session -d -s $1
tmux send-keys -t $1:0 "printenv | grep TEST" C-m
Corre:
# ./test.sh 123 #The tmux server is automatically launched
# ./test.sh 555
Resultados:
tmux a -t 123
mostraTEST=123
tmux a -t 555
mostraTEST=123
em vez deTEST=555
!!!!
Por que minhas próximas sessões do TMUX herdam todas as variáveis de ambiente da primeira sessão criada?
Isso é bastante surpreendente, como posso fazer para parar esse comportamento sem sentido?
https://manpages.debian.org/experimental/tmux/tmux.1.en.html#GLOBAL_AND_SESSION_ENVIRONMENT
Quando o servidor é iniciado, o tmux copia o ambiente para o ambiente global; além disso, cada sessão tem um ambiente de sessão. Quando uma janela é criada, a sessão e os ambientes globais são mesclados. Se existir uma variável em ambos, o valor do ambiente de sessão será usado .
Quando eu executo 123
, TEST
é definido GLOBAL para o servidor tmux. Mas quando eu executo 555
, TEST=123
deve ser substituído pelo env da sessão, mas não é...
Tanto quanto eu entendo lendo o manual, este é o comportamento pretendido.
Quando o servidor é iniciado (automaticamente) quando você cria sua primeira sessão, o ambiente global é realmente criado e obtém a
TEST
variável.Por que você acha que ao criar a segunda sessão, o ambiente da sessão obterá o
TEST
.Para definir um ambiente de sessão, você pode usar
set-environment
.executá-lo
então você pode procurar um ambiente usando
show-environment
EDITAR
A janela 0 criada em
new-session
e, portanto, não obtém o env definido usandoset-environment
.Concordo que isso é estranho.
Eu acho que o que você quer pode ser alcançado com (algo como) este é .bashrc:
e newsess.sh:
/tmp/env:
/tmp/env2:
então
Você obteve A=1 e B=2 em cada janela da sessão env e A=5 e B=5 em cada janela da sessão env2 .