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.