Eu fonte de bashrc de alguns dos meus amigos. Então, acabo tendo entradas duplicadas na minha variável $ PATH. Não tenho certeza se esse é o problema dos comandos que demoram para iniciar. Como o $ PATH trabalha internamente no bash? Ter mais CAMINHOS diminui o tempo de inicialização?
45
zsh
, é tão simples quantotypeset -aU path
, FWIW .Respostas:
Ter mais entradas
$PATH
não diminui a velocidade da inicialização diretamente, mas diminui a cada vez que você executa um comando específico em uma sessão de shell (nem sempre que o comando é executado, porque o bash mantém um cache). A desaceleração raramente é perceptível, a menos que você tenha um sistema de arquivos particularmente lento (por exemplo, NFS, Samba ou outro sistema de arquivos de rede ou no Cygwin).Entradas duplicadas também são um pouco irritantes quando você revisa
$PATH
visualmente, você precisa percorrer mais coisas.É fácil o suficiente para evitar adicionar entradas duplicadas.
Nota lateral: obter o script shell de outra pessoa significa executar o código que ele escreveu. Em outras palavras, você está dando a seus amigos acesso à sua conta sempre que eles quiserem.
Nota lateral:
.bashrc
não é o local certo para configurar$PATH
ou qualquer outra variável de ambiente. As variáveis de ambiente devem ser definidas~/.profile
. Consulte Quais arquivos de instalação devem ser usados para configurar variáveis de ambiente com o bash? , Diferença entre .bashrc e .bash_profile .fonte
case :$PATH:
e nãocase $PATH
para que corresponda, mesmo que a entrada seja a primeira ou a última.Eu já vi pessoas limparem duplicatas de suas variáveis PATH usando
awk
algo assim:Você pode tentar adicionar isso ao seu próprio bashrc e garantir a fonte dos outros arquivos em algum lugar antes de executá-lo.
Uma alternativa seria usar o
pathmerge
utilitário.Quanto ao seu problema de velocidade, isso não afetará o tempo de inicialização do shell de maneira significativa, mas poderá poupar algum tempo na conclusão da guia de comandos, especialmente quando o comando não for encontrado no caminho e ele realizar buscas repetidas no mesmo pastas procurando por ele.
Uma observação sobre segurança: você deve realmente prestar atenção às advertências de Gilles sobre segurança aqui. Ao adquirir um arquivo de propriedade de outro usuário, você está dando um passe livre para que esses usuários executem seu próprio código como seu usuário toda vez que iniciar um shell. Se você não confia na senha desses usuários, não deve fornecer os arquivos de shell deles.
fonte
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
não é apenas uma questão cosmética. É o mesmo que adicionar.
ao seu caminho, o que é potencialmente perigoso.Com base na resposta do @Gilles, você pode agrupá-la em uma função para minimizar a digitação:
fonte
Somente a primeira correspondência
$PATH
é executada, portanto, as entradas subsequentes não são processadas depois disso. É por isso que às vezes você deve revisar a ordem das entradas no seu$PATH
para fazer com que seu ambiente se comporte conforme o esperado.Para responder à sua pergunta: isso não deve ser a causa da inicialização lenta.
fonte
TAB
? Nesse caso, você deve verificar se a definição completa não se parececomplete -c which -a
. Você deve excluir o-a
parâmetro Você pode verificar que, ao emitir o comando:complete | grep which
.Para evitar entradas duplicadas no meu PATH, tive que colocar o seguinte em AMBOS ~ / .bash_profile e ~ / .bashrc:
A principal desvantagem é que ele classifica as entradas PATH, mas acho que posso conviver com isso.
fonte