Como remover diretórios duplicados de $ PATH?

2

Em algumas das minhas janelas de terminal, tenho entradas duplicadas na variável PATH ; algo assim:

PATH=/a/b:/c/d:/a/b:/c/d:/e/f:/a/b

Eu acho que os culpados são linhas como esta em alguns dos meus scripts:

PATH=/a/b:$PATH

Depois de buscar isso e aquilo e isso novamente PATH se torna muito longo. Esta é a pergunta:

Existe um comando bash para limpar PATH e variáveis env semelhantes? Deve ser um script bash porque não é possível executar um utilitário e esperar que ele altere o ambiente do shell de chamada.

No exemplo acima, o PATH limpo deve ficar assim:

PATH=/a/b:/c/d:/e/f
    
por Michael 23.06.2018 / 00:25

2 respostas

5

É melhor não criar as duplicatas do que tentar removê-las depois. Isso é facilmente evitado com a técnica que eu uso no meu .bashrc para adicionar meu diretório bin/ privado:

[ "${PATH#*$HOME/bin:}" == "$PATH" ] && export PATH="$HOME/bin:$PATH"

Eu fiz isso no momento em que fazia atualizações para .bashrc e queria executá-lo novamente sem reiniciar o shell.

Se você quiser adicionar um diretório ao final de $PATH , será necessário usar dois pontos principais:

[ "${PATH#*:$HOME/bin}" == "$PATH" ] && export PATH="$PATH:$HOME/bin"

Você pode usar a expansão de parâmetro para percorrer PATH e remover duplicatas, mas seria um pouco complexo e você precisaria decidir qual posição deveria ser mantida. Algo ao longo das linhas de: -

OLDPATH="$PATH"; NEWPATH=""; colon=""
while [ "${OLDPATH#*:}" != "$OLDPATH" ]
do  entry="${OLDPATH%%:*}"; search=":${OLDPATH#*:}:"
    [ "${search#*:$entry:}" == "$search" ] && NEWPATH="$NEWPATH$colon$entry" && colon=:
    OLDPATH="${OLDPATH#*:}"
done
NEWPATH="$NEWPATH:$OLDPATH"
export PATH="$NEWPATH"

Depois de ter escrito isso na hora e testado agora, eu deveria ter removido a maioria dos erros e deveria ser um guia adequado para o que você precisaria fazer. Ele deixa a ocorrência last de quaisquer duplicatas, que é onde eles estariam se você usasse meu script para evitar duplicatas em primeiro lugar. Em um script, é claro que ele precisa ser chamado com o comando . / source .

    
por 23.06.2018 / 00:44
0

A technet da Microsoft resolve esse problema com um script de shell de energia . Este script identifica e remove entradas duplicadas da variável PATH .

Diz:

Sometimes repeated installation of software can add duplicate entries into the PATH environment variable. Since environment variable has a there is a hard coded limit in the size of this variable, there are chances that you may it that limit over a period of time. This script checks the PATH environment variable and removes any duplicate path entries.

    
por 23.06.2018 / 07:16

Tags