Modifico meu arquivo .bashrc frequentemente e depois o fonte. No entanto, quando tenho coisas como
export PATH="~/bin:~/perl5/bin:$PATH"
no meu arquivo, a PATH
variável de ambiente cresce toda vez que eu origino o arquivo.
Por exemplo, na primeira vez que o .bashrc é originado, a PATH
variável consiste em ~/bin:~/perl5/bin:/usr/bin:/bin
.
A segunda vez que consiste ~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
A terceira vez que consiste ~/bin:~/perl5/bin:~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
Existe uma maneira simples de fazê-lo adicionar apenas algo que ainda não esteja no PATH?
/etc/profile
no Debian Lenny, então eu o incluo no meu.bashrc
.pathmunge /some/path
vai colocar/some/path
no início$PATH
epathmunge /some/path after
vai colocar/some/path
no final$PATH
if ! [[ $PATH =~ (^|:)$1($|:) ]] ; then
.pathmunge /foo before
não consegue isso. Uma maneira melhor seria adicionar / foo no início e remover as duplicatas posteriormente.Eu estava tendo esse problema, então usei uma combinação de técnicas listadas na pergunta StackOverflow . A seguir, o que eu usei para desduplicar a variável PATH real que já havia sido definida, pois não queria modificar o script base.
Você sempre pode otimizar isso um pouco mais, mas eu tinha um código extra no original para exibir o que estava acontecendo para garantir que ele estivesse definindo corretamente as variáveis. A outra coisa a notar é que eu realizo o seguinte
Isso é para garantir que eu possa lidar com diretórios com espaços (os diretórios pessoais do Samba com nomes de usuário do Active Directory podem ter espaços!)
fonte
/bin
se houver outras entradas, como/usr/bin
porque a regexp corresponde mesmo que as duas entradas não sejam as mesmas!Defina seu caminho explicitamente.
fonte
PATH
nem sempre é o mesmo.Apenas uma sequência:
fonte
$PATH
. Gosto de colocar diretórios específicos no início de$PATH
(curtir/home/username
) para que minhas cópias pessoais de executáveis sejam executadas em vez dos padrões internos.Posso pensar em duas maneiras diferentes de resolver isso. O primeiro é iniciar o .bashrc com uma linha que defina explicitamente o PATH base, dessa forma, toda vez que você o origina, ele é redefinido para a base antes de adicionar diretórios adicionais.
Por exemplo, adicione:
Como alternativa, você pode procurar um item antes de adicioná-lo ao caminho. Para fazer isso, você usaria algo como:
O último tende a ficar um pouco repetitivo se você adicionar muitas entradas, no entanto, por isso, eu costumo ficar com o primeiro. Se você quisesse usar isso e planejasse adicionar muitas entradas, seria sensato escrever uma função bash para lidar com isso.
Nota: A segunda opção pode funcionar apenas como está escrito nas versões modernas do bash. O suporte à expressão regular não é um recurso do Bourne Shell (/ bin / sh) e pode não existir em outros shells. Além disso, o uso de aspas pode não ser necessário ou pode até causar problemas em algumas versões mais recentes do bash.
fonte
PATH
nem sempre é o mesmo.if
. Além disso, é surpreendentemente (para mim) fácil transformar isso em uma função que circula argumentos separados por espaço, para que você possa apenas dizer:add_to_PATH ~/perl5/bin ~/.bin
unix.stackexchange.com/a/4973/28760 (acho que acase
instrução usada é mais portátil) , mas vocêif
é mais claro para mim). EDITAR coincidência estranha que essa pergunta também adiciona perl5!Aqui está a minha solução:
PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")
Um liner fácil e agradável que não deixa um rastro:
fonte