ZSH: Onde colocar a variável de ambiente para que o aplicativo iniciado possa pegá-la?

3

Eu preciso de uma variável de ambiente KEY="value" disponibilizada para um aplicativo GUI antes de iniciá-lo. O arquivo de inicialização (aquele que coloca o ícone na área de trabalho e na barra lateral no Ubuntu) tem um valor de Exec=/path/to/executable/file .

Ao usar o ZSH, onde devo definir essa variável para que fique disponível para esse aplicativo, independentemente de eu clicar no iniciador do aplicativo ou se eu digitar diretamente / path / to / executable / file em meu shell?

No prompt da linha de comando, tentei digitar KEY="value" e export KEY="value" antes de clicar no inicializador, mas parece que não funcionou. Eu também tentei ambas as linhas no meu ~/.zshrc , fiz um source ~/.zshrc do meu shell e cliquei novamente no launcher, mas isso também não funcionou.

Qual arquivo deve entrar? Acredito que você tenha a opção ~/.zshenv , ~/.zprofile , ~/.zshrc e ~/.zlogin .

(Para pontos de bônus, devo usar export ou não?)

(Eu devo, pelo menos, fazer o logout e logar de volta, antes que a variável se torne disponível para o aplicativo quando ele é iniciado a partir do launcher?)

    
por user779159 31.01.2014 / 10:56

2 respostas

4

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.

    
por 31.01.2014 / 11:27
0

Eu não acredito que @mpy esteja correto em dizer que você pode omitir a declaração de exportação. A presença / ausência de exportação determina se os processos iniciados a partir desse shell herdarão ou não a variável de ambiente. Se você não exportar, o xserver não herdará a variável de ambiente

 imalison  ~  ABCD='14'
 imalison  ~  python -c "import os; print os.environ.get('ABCD')"
None
 imalison  ~  export ABCD='14'
 imalison  ~  python -c "import os; print os.environ.get('ABCD')"
14
    
por 10.08.2015 / 23:16