Como posso limpar entradas duplicadas do meu PATH? [duplicado]

1

Atualmente, meu $ PATH tem duas entradas idênticas para /usr/local/bin e estou curioso para saber se há uma maneira de limpar isso ou se eu não deveria me preocupar com isso. Parece assim (dividido em uma lista legível):

/Users/myself/.rvm/gems/ruby-2.0.0-p353/bin
/Users/myself/.rvm/gems/ruby-2.0.0-p353@global/bin
/Users/myself/.rvm/rubies/ruby-2.0.0-p353/bin
/usr/local/bin <--( Here )
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin <--( Here )
/opt/X11/bin
/usr/texbin
/Users/myself/.rvm/bin
    
por ivan 19.01.2014 / 18:11

2 respostas

1

Uma maneira de fazer isso é apenas redefinir seu caminho

export PATH=/Users/myself/.rvm/gems/ruby-2.0.0-p353/bin:
/Users/myself/.rvm/gems/ruby-2.0.0-p353@global/bin:
/Users/myself/.rvm/rubies/ruby-2.0.0-p353/bin:
/usr/local/bin:
/usr/bin:
/bin
/usr/sbin:
/sbin:
/opt/X11/bin:
/usr/texbin:
/Users/myself/.rvm/bin:

(Você precisará colocar tudo isso em uma linha.)

Apesar de ter um caminho definido duas vezes não vai doer nada. Corrigir isso só depende de como você é OCD.

Para que isso persista nas reinicializações & novas janelas de terminal, você precisará modificar seu script de inicialização (~ / .profile, ~ / .bashrc, / etc / environment)

    
por 19.01.2014 / 18:15
3

Isso porque você modificou algo em algum lugar e adicionou o mesmo caminho duas vezes. Eu evito isso usando uma pequena função que modifique meu $PATH que só irá adicionar um diretório se isso ainda não estiver presente:

pathmunge () {
        if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
           if [ "$2" = "after" ] ; then
              PATH=$PATH:$1
           else
              PATH=$1:$PATH
           fi
        fi
}

Eu tenho essa função no meu arquivo .profile e defino meu caminho como:

pathmunge $HOME/bin
pathmunge $HOME/scripts
export PATH

Basta percorrer os arquivos de inicialização dos shells e usar esse método para evitar duplicatas.

Se você quiser apenas remover rapidamente dupes existentes, faça o seguinte:

PATH=$(echo $PATH | tr ':' '\n' | perl -lne 'chomp; print unless $k{$_}; $k{$_}++' | tr '\n' ':' | sed 's/:$//')

Estou usando perl em vez de sort -u para manter a ordem dos diretórios inalterada.

    
por 19.01.2014 / 19:30

Tags