Como você deseja que a variável seja bem definida em seus terminais ( shell interativo não-login ) e para os ícones do ativador de desktop (X-server iniciado por login não interativo shell ) você deve colocar a definição em seu ~/.zshenv
.
E sim, você precisa reiniciar a sessão x para ter o novo ambiente disponível para os ícones da área de trabalho. Imagine esse esquema de inicialização: Graphical Login -> Use your default shell to start the X session -> Desktop -> Shell terminal / Launch program via icon
, então os shells filho herdam o ambiente do pai, que é usado para iniciar a sessão X. Esse shell leu os arquivos RC apenas uma vez - no seu login para a sessão X.
Para o ponto de bônus . Isto é o que o manual diz:
export [ name[=value] ... ]
The specified names are marked for automatic export to the environment of subsequently executed commands. (...)
Se você definir sua variável em ~/.zshenv
, poderá, em princípio, omitir o export
, pois esse arquivo é lido por padrão. A única diferença surge quando você inicia um shell com zsh -f
, o que não gera nenhum arquivo RC. Uma pequena demonstração:
% foo=foo_defined
% export bar=bar_defined
% print -l $foo $bar
foo_defined
bar_defined
% zsh -f
% print -l $foo $bar
bar_defined
%
eu. e. somente o $bar
exportado é definido em shells subsequentes. Mas para estar no lado seguro, use export
- não consigo pensar em um caso em que isso seja prejudicial.