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


9

Algumas das minhas variáveis ​​de ambiente ( $PATH, $MANPATHe amigos) são parcialmente configuradas em diferentes arquivos de origem.

Encontro-me desejando que um comando ou método colete rapidamente qual parte , em uma variável de ambiente específica, veio de qual arquivo .

Meu $ PATH, por exemplo, tem sido obviamente set (adicionado a) em .bashrc, /etc/paths, /etc/paths.d/X11... e eu ainda estou olhando para esse último arquivo misteriosa que redundante criou uma definição de caminho duplicado na minha $PATH.

Leva um bom tempo para localizar 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 levantadores ... ou sou o único a pensar nesse sentido?

Respostas:


6

Normalmente PATHé definido para um valor inicial de uma forma altamente dependente do sistema pelo programa que registros você em ( pam_envé um contribuinte comum), então /etc/profilee ~/.profilee arquivos que incluem ir para modificar esse valor.

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

Primeiro tente fazer 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 -xno início de /etc/profilee ~/.profile. O shell imprimirá um rastro do que ele faz no seu fluxo de erros padrão; procure atribuições para PATHno rastreio.

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


6

Seu PATH pode ser definido em qualquer lugar, não apenas no seu arquivo .bashrc. Provavelmente, seu sistema possui um arquivo /etc/profilee / ou /etc/profile.localdefine um caminho padrão para todos os usuários em seu sistema. Alterações ou acréscimos específicos do usuário a ele podem ser definidos no seu .profilearquivo se não estiverem no seu .bashrc, ou você pode estar apenas usando o padrão no seu sistema.

Se você quiser fazer alterações que afetem apenas você, eu as colocaria .profileusando o seguinte formulário:

export PATH=/new/directory:$PATH

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

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


1

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

Você pode ter alguma sorte com set -xembora.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.