Eu defini o mesmo caminho na variável $ PATH 6 vezes.
Eu não estava saindo para verificar se funcionava.
Como posso remover as duplicatas?
A variável $ PATH se parece com isso:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Como eu redefini-lo para apenas
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Respostas:
Você acabou de executar:
isso seria para a sessão atual, se você quiser alterá-lo permanentemente, adicione-o a qualquer perfil .bashrc, bash.bashrc, / etc / profile - o que for adequado ao seu sistema e às necessidades do usuário.
Nota: Isto é para Linux. Vamos deixar isso claro para novos codificadores. (`, ') Não tente SET = estes.
fonte
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Se você estiver usando o Bash, também poderá fazer o seguinte se, digamos, você desejar remover o diretório
/home/wrong/dir/
da suaPATH
variável:fonte
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) antes de atribuí-lo ao PATH.$PATH
. Use este:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
eco $ PATH | sed -e 's /: \ / scratch \ / SJN \ / anaconda \ / bin \ / python \ / $ //' `` para remover / scratch / SJN / anaconda / bin / pythonO Linux From Scratch possui esta função em / etc / profile
Isso deve ser usado com essas funções para adicionar ao caminho, para que você não faça isso de forma redundante:
O uso simples é fornecer apenas
pathremove
o caminho do diretório a ser removido - mas lembre-se de que ele deve corresponder exatamente:Isso removerá cada instância desse diretório do seu caminho.
Se você deseja que o diretório esteja no seu caminho, mas sem as redundâncias, você pode apenas usar uma das outras funções, por exemplo - para o seu caso específico:
Mas, a menos que a legibilidade seja a preocupação, neste momento é melhor você apenas fazer:
Isso funcionaria em todas as conchas conhecidas pelo homem?
Eu presumo que o acima para o trabalho na
sh
,dash
e,bash
pelo menos. Eu ficaria surpreso ao saber que não funcionacsh
,fish', or
ksh`. Duvido que funcionaria no shell de comando do Windows ou no Powershell.Se você possui o Python, o seguinte tipo de comando deve fazer o que é solicitado diretamente (ou seja, remover caminhos redundantes):
Um one-liner (para evitar problemas de múltiplas linhas):
O acima remove os caminhos redundantes posteriores. Para remover caminhos redundantes anteriores, use o índice de uma lista invertida e inverta-o novamente:
fonte
${!PATHVARIABLE}
é um tipo de variável indireta, mas não sei ao certo como funciona aqui. Você poderia explicar isso por favor?local
builtin (que só pode ser usado dentro de uma função.) Se você tiver outras dúvidas, provavelmente deverá fazer uma nova pergunta no site (depois de pesquisá-la primeiro para garantir você não está criando uma duplicata exata ...).Aqui está um código de uma linha que limpa o PATH
Usa
/bin/awk
para que funcione mesmo quando PATH está quebradofonte
echo $PATH
PATH= # pass new list of entries
fonte
Se você deseja remover todos os caminhos duplicados, eu uso este script que escrevi há algum tempo, pois estava tendo problemas com vários caminhos perl5 / bin:
E eu coloquei no meu ~ / .profile no final. Desde que eu uso o BASH quase exclusivamente, eu não tentei em outros reservatórios.
fonte
|uniq
para|sort|uniq
corrigir isso, mas isso mudará a ordem de todos os diretórios no caminho, o que não acho que seja um efeito colateral desejável.Supondo que seu shell seja o Bash, você pode definir o caminho com
mas, como Levon disse em outra resposta, assim que você encerrar o shell, as alterações desaparecerão. Você provavelmente deseja configurar seu
PATH
in~/.bash_profile
ou~/.bashrc
.fonte
No bash, você pode simplesmente $ {var / find / replace}
Ou, neste caso (como o bit de substituição está vazio), basta:
Eu vim aqui primeiro, mas fui outra mercadoria, pois pensei que haveria uma expansão de parâmetros para fazer isso. Mais fácil que o sed !.
Como substituir o caractere de marcador ou palavra na variável pelo valor de outra variável no Bash?
fonte
%
significa match se no final da string#
for o começo.Não há ferramentas padrão para "editar" o valor de
$PATH
(por exemplo, "adicionar pasta apenas quando ainda não existe" ou "remover esta pasta").Para verificar qual seria o caminho ao fazer login na próxima vez, use
telnet localhost
(outelnet 127.0.0.1
). Ele solicitará seu nome de usuário e senha.Isso fornece um novo shell de login (ou seja, um completamente novo que não herda nada do ambiente atual).
Você pode verificar o valor de
$PATH
lá e editar seus arquivos rc até que esteja correto. Isso também é útil para verificar se você pode efetuar login novamente após fazer uma alteração em um arquivo importante.fonte
/bin/bash -i
. Muito menos aborrecimento.Como você adicionou esses caminhos duplicados à sua variável PATH? Você deve ter editado um dos seus
.
arquivos. (.tcshrc
, ou.bashrc
etc, dependendo do seu sistema / shell). A maneira de corrigi-lo é editar o arquivo novamente e remover os caminhos duplicados.Se você não editou nenhum arquivo e deve ter modificado o PATH interativamente. Nesse caso, as alterações não serão "mantidas", ou seja, se você abrir outro shell ou se desconectar e se conectar novamente, as alterações desaparecerão automaticamente.
Observe que também existem alguns arquivos de configuração em todo o sistema, mas é improvável que você os modifique; portanto, provavelmente você alterará os arquivos no diretório pessoal pessoal (se desejar tornar essas alterações permanentes depois de definir um conjunto de caminhos)
fonte
Para um modelo fácil de copiar e colar, eu uso este snippet Perl:
Dessa forma, você não precisa escapar das barras para o operador substituto.
fonte