O comportamento que você descreve é o esperado. As variáveis de ambiente são definidas em .profile
, que é lido quando você efetua login. Iniciar uma nova sessão do tmux não faz o seu login. O Tmux inicia um shell de login por padrão, mas você desativou isso na configuração, portanto, As janelas tmux apenas herdam o ambiente externo.
Se você colocar source .profile
no seu .zshrc
, isso substituirá qualquer ambiente em que o shell estiver sendo executado. Isso significa que você não pode executar um shell em um ambiente diferente do padrão, por exemplo, para tentar algo com um diferente PATH
.
Basta remover source .profile
de .zshrc
. Você terá seu ambiente padrão, definido no tempo de login, em todos os shells.
Se o seu shell de login for zsh, observe que ele lê .zprofile
no tempo de login, não .profile
. Isso é diferente do bash, que lê .profile
se não houver .bash_profile
. O Zsh funciona de maneira diferente porque sua sintaxe é diferente de sh, portanto, ele não pode ler .profile
diretamente. Se você quiser ter um .profile
que trabalhe sob sh para logins GUI e também usar o mesmo arquivo para logins em modo texto, e você tiver zsh configurado como seu shell de login, use a seguinte linha como seu ~/.zprofile
:
emulate sh -c 'source ~/.profile'
Se o tmux estiver configurado para executar um shell de login, todas as janelas do tmux substituirão o ambiente ao redor, em vez de herdá-lo. Isto significa que se você definir novas variáveis fora do tmux, você ainda as terá na sessão do tmux, mas se você alterar os valores das variáveis que já estão definidas então suas mudanças serão perdidas dentro do tmux. Tudo somado, o comportamento padrão do tmux não faz muito sentido. Evitar isso é o ponto da linha set-option -g default-command $SHELL
em ~/.tmux.conf
.
Se você usa o tmux como uma maneira de fazer um “login fresco”, você pode preferir que cada janela seja executada em um ambiente novo. Se assim for, então provavelmente você deve limpar seu ambiente com algo como
set-option -g default-command env -i USER="$USER" LOGNAME="$LOGNAME" $SHELL
E lembre-se de que, se o seu shell de login for zsh, ele lerá .zprofile
, não .profile
.