Os processos herdam as variáveis de ambiente de seus pais, eles não os lêem de um arquivo. A maioria dos programas tem as mesmas variáveis de ambiente que o programa que os iniciou e nunca os modifica.
Quando você efetua login, várias variáveis de ambiente são configuradas pelo sistema de login. Os detalhes dependem da distribuição e da configuração específica do sistema. Você pode encontrar HOME
e PATH
em todos os lugares, e USER
, LOGNAME
, MAIL
e SHELL
são muito comuns.
Na maioria dos sistemas, as variáveis de ambiente também podem ser listadas em /etc/environment
e ~/.pam_environment
; esses arquivos são lidos quando você efetua login por qualquer método. Quando você efetua login em um shell interativo (no modo de texto ou por SSH), ou frequentemente, mas nem sempre, quando você faz login no modo gráfico (isso depende do gerenciador de exibição,
o gerenciador de sessões e a distribuição), o shell lê /etc/profile
e ~/.profile
(ou possivelmente outros arquivos, dependendo do shell e da configuração). Esses arquivos, assim como outros arquivos e programas envolvidos no processo de login, geralmente definem variáveis de ambiente.
Não há receita milagrosa para descobrir qual programa ou configuração faz com que uma variável de ambiente seja definida. Você pode procurar definições em seus arquivos de configuração e nos arquivos de configuração do sistema:
grep -rs SOMEVAR /etc ~/.[!.]*
Isso não encontrará nomes de variáveis de ambiente que sejam codificados em aplicativos. Você também pode examinar diferentes processos para ver quais os que o possuem, o que dá uma indicação de qual deles o definiu. No Linux, o comando a seguir mostra as variáveis de ambiente do processo 1234:
tr \0 \n </proc/1234/environ | sort
Note que os shells possuem suas próprias variáveis, que não são variáveis de ambiente. Uma atribuição em um script de shell ou na linha de comando ( VAR=VALUE
) define uma variável de shell; se a variável for exportada ( export VAR=VALUE
ou export VAR
após VAR
ter um valor), ela se tornará uma variável de ambiente visível por processos filhos. Todas as variáveis de ambiente se tornam automaticamente variáveis de shell.