Versão resumida: a remoção de uma única linha de /usr/local/etc/bash_completion
reduziu o tempo para abrir uma nova guia de dez segundos para um quarto de segundo. Leia para mais detalhes.
Estou usando o bash-completion do homebrew e encontrei o mesmo problema. Levava mais de dez segundos para carregar os scripts de conclusão do bash cada vez que eu abria um terminal.
Na maioria das vezes, parece que é ocupada por uma única linha na função have()
: uma chamada para type
para determinar se um programa de linha de comando está instalado.
Com a função have()
padrão e todos os scripts de conclusão bash fornecidos, seriam necessários 10.561s para carregar os scripts (relatados com o prefixo time
à linha . /opt/local/etc/bash_completion
no meu arquivo .bash_profile
.
Depois de comentar a linha PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&
do meu script /usr/local/etc/bash_completion
(deixando a linha have=yes
, abrir um novo terminal leva apenas 0,258s. Esse tempo pode ser reduzido ainda mais removendo scripts de conclusão desnecessários (links simbólicos) do /usr/local/etc/bash_completion.d
directory.
Eu não sei porque a chamada para type
está demorando tanto. Estou investigando isso em seguida.
Uma potencial desvantagem dessa abordagem é que ela fará com que as funções de conclusão do bash sejam carregadas na memória, mesmo que você não tenha nenhum uso para elas. A função have()
verifica se um comando ou aplicativo está instalado. Se não for, o script de conclusão geralmente decide não se incomodar em se carregar porque não será útil.
No momento, estou feliz com a troca, mas continuarei a explorar o problema type
à medida que eu tiver tempo. Vou atualizar minha resposta se encontrar uma solução melhor.