É possível descobrir quais arquivos estão configurando / adicionando variáveis de ambiente e sua ordem de precedência?

9

Algumas das minhas variáveis de ambiente ( $PATH , $MANPATH e amigos) estão parcialmente configuradas em arquivos de origem diferentes.

Eu me encontro desejando um comando ou método para reunir rapidamente qual parte , em uma variável de ambiente específica, veio de qual arquivo .

Meu $ PATH, por exemplo, foi obviamente definido (adicionado a) em .bashrc , /etc/paths , /etc/paths.d/X11 … e ainda estou procurando pelo último arquivo misterioso que criou uma definição de caminho duplicada em meu $PATH .

Demora um bom tempo para identificar manualmente os arquivos que contribuem para as variáveis de ambiente. Deve haver uma maneira útil de contornar esse trabalho desnecessário de rastrear todos os setters ... ou eu sou o único a pensar nesse sentido?

    
por Henrik 08.12.2010 / 02:29

3 respostas

6

Normalmente PATH é definido como um valor inicial de um modo altamente dependente do sistema pelo programa que faz o seu login ( pam_env é um colaborador comum), então /etc/profile e ~/.profile e arquivos que eles incluem vão modificar esse valor.

Remova qualquer alteração para PATH em .bashrc , as configurações de ambiente não pertencem a .bashrc : consulte Diferença entre .bashrc e .bash_profile .

Primeiro, faça login no modo de texto (por exemplo, com ssh localhost ), pois a inicialização da sessão é muito mais simples do que no modo gráfico.

Coloque set -x no início de /etc/profile e ~/.profile . O shell irá imprimir um rastreamento do que ele faz em seu fluxo de erro padrão; procure atribuições para PATH no rastreamento.

Não há noção de precedência para atribuições de variáveis de ambiente: quem atribui as últimas vitórias.

    
por 08.12.2010 / 20:48
6

Seu PATH pode ser definido em qualquer lugar, não apenas no seu arquivo .bashrc. O mais provável é que seu sistema tenha um arquivo, /etc/profile e / ou /etc/profile.local , que define um caminho padrão para todos os usuários em seu sistema. Alterações ou adições específicas do usuário podem ser definidas no arquivo .profile , se elas não estiverem no seu .bashrc , ou você pode estar usando o padrão em seu sistema.

Se você quiser fazer alterações que afetam apenas você, eu as colocaria em .profile usando o seguinte formulário:

export PATH=/new/directory:$PATH

editando o caminho atual, em vez de reescrevê-lo completamente.

A seção "INVOCATION" de man bash (ou aqui ) explica a diferença entre .profile e .bashrc , e assim por diante, e quais outros arquivos e leitura e em que ordem quando você faz login ou inicia um shell.

    
por 11.08.2011 / 23:25
1

É muito improvável que exista um mecanismo para isso. Basta pensar em quantas maneiras existem para alterar o valor de uma variável env no shell.

Você pode ter um pouco de sorte com set -x .

    
por 08.12.2010 / 08:13