$ PATH é preenchido com duplicatas

5

Recentemente, comecei a configurar um ambiente OSX 10.7 para desenvolvimento. Eu instalei o HomeBrew e adicionei o seguinte ao meu .bash_profile :

export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"        

Tudo está funcionando bem, exceto quando eu echo $PATH recebo a seguinte sequência de duplicatas:                /usr/local/bin:/usr/local/sbin:~/bin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Para torná-lo mais legível, esses são os caminhos:

/usr/local/bin
/usr/local/sbin
~/bin:/usr/local/bin
/usr/local/sbin
~/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin

Acho que não fiz alterações no caminho além da única linha no meu .bash_profile . Qual é a melhor maneira de eu juntar essas duplicatas? Existe uma maneira de descobrir quais arquivos estão modificando meu caminho e tentar eliminá-los?

    
por Nick Tomlin 16.07.2012 / 19:47

4 respostas

3

Depois de fazer o meu comentário, aqui estão algumas sugestões para remover $PATH .

Olhando para o seu caminho, parece que .bash_profile está sendo executado duas vezes, ou a modificação feita em .bash_profile está duplicada em outro lugar.

Existem 7 adições duplicadas de '/ usr / local / git / bin' e 'use / local / bin' [sic], seguidas por mais 5 cópias de '/ usr / local / git / bin'. Dependendo de como o git está instalado, você poderá consultar o gerenciador de pacotes sobre quais arquivos foram instalados com git ; pode haver alguns arquivos de configuração ou arquivos de sistema modificados que afetam PATH .

Coloque set -x no topo de seu .bash_login e inicie um novo shell de login. Você deve obter muitos resultados que mostrem exatamente o que o bash está fazendo na inicialização, o que deve ajudá-lo a descobrir onde PATH está sendo modificado. Você pode remover set -x quando descobrir ou desistir. Se você não encontrar nada, você também pode adicioná-lo ao início de /etc/profile para rastrear o que o sistema faz antes que seu próprio .bash_profile seja processado.

    
por 16.07.2012 / 20:23
2

Eu adicionei isso ao meu $ HOME / .bashrc (você também deve ser capaz de adicioná-lo ao .bash_profile se quiser) para remover entradas duplicadas do $ PATH. Eu só testei no linux, mas também deve funcionar no mac. Ele deve ser adicionado após o PATH de exportação inicial.

export PATH=$(echo $PATH | awk -F: '
{ for (i = 1; i <= NF; i++) arr[$i]; }
END { for (i in arr) printf "%s:" , i; printf "\n"; } ')
    
por 13.11.2012 / 12:33
1

Eu executei o script de Ryan Thompson na linha de comando.
Ele removeu todas as duplicatas para mim, sem alterar a ordem e sem deixar um :

PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"

Além do conveniente 1-liner acima, Ryan compartilha o (mais  estruturado) script que ele usa em seu config para deduplicar outras variáveis e o PATH .

( Veja sua postagem Unix e Linux para mais detalhes )

    
por 11.05.2018 / 08:06
0

Uma instalação de git modificou seu .bash_profile sem verificação preliminar séria. Este instalador corrompeu (aparentemente 12 vezes). Use o receipe sugerido por rash , mas apenas uma vez para definir o PATH mínimo correto para incluir de volta em seu .bash_profile .

Você não precisa inicializar seu PATH no seu .bashrc . Este script de inicialização é reservado para a configuração que deve ser alterada com cada nível de shell, por exemplo, um prompt, uma posição, uma cor, mas não um PATH.

    
por 19.08.2013 / 00:48