Percebi algo peculiar ao trabalhar com várias sessões do tmux. Não tenho certeza de toda a terminologia, então, por favor, corrija-me se eu entender algo errado.
A criação de sessões tmux além da primeira não herda o ambiente do qual foi criada, elas herdam o ambiente que gerou a primeira sessão.
export a=false; export b=false
bash
export a=true
tmux new-session -d -s first
bash
export b=true
tmux new-session -d -s second
em seguida, a execução echo $a $b
de qualquer sessão fornece a saída true false
. Eu estava esperando true true
para a segunda sessão.
Não sei como o tmux "lembra" o ambiente da primeira sessão. Posso realizar outro experimento:
Se eu atualizar o ambiente na primeira sessão, desanexar e gerar uma segunda sessão, a segunda sessão não herdará a atualização.
E outro experimento:
Se eu sair do subshell depois de criar a primeira sessão (assim "esquecendo" a variável de ambiente a
) e gerar uma segunda sessão, a segunda sessão ainda se lembrará do ambiente.
Eu gostaria de saber melhor por que isso está acontecendo e um pouco do que o tmux está fazendo nos bastidores, então qualquer conselho nessa direção é bem-vindo.
Há uma seção chamada
ENVIRONMENT
emman 1 tmux
:E onde o manual explica
set-option
, lê-se:Portanto, seu
a
eb
são copiadostmux
apenas quando o servidor é iniciado. No seu caso é quando você cria afirst
sessão. Estas variáveis não estão na lista armazenada porupdate-environment
opção, portanto posteriormente não são atualizadas.Se você fez
e então anexado a esta sessão, suas variáveis atuais seriam absorvidas por
tmux
. Isso não significaecho $a $b
que os mostraria no shell que já havia sido iniciado (portmux new-session -d -s first
). Mas um novo shell (ou qualquer outro processo) em um novo painel os herdaria detmux
.É possível definir a opção globalmente. Veja a
OPTIONS
seção. Mas tenha essas coisas em mente:-E
opçãoattach-session
; poucos outros comandos também suportam-E
);Para resumir: em geral , as
tmux
sessões e os processos internos não herdam simplesmente o ambiente do cliente, como faria um processo filho simples.