Atualização em 2013: a maior parte da conclusão do bash foi reescrita para carregar automaticamente as conclusões somente quando necessário. O roteiro principal é muito mais simples agora.
O script de conclusão pode às vezes ser enorme em padrões de script de shell. Em um dos servidores que eu tenho acesso, são quase 1700 linhas (57 KB) e isso é apenas o script principal . Em /etc/bash_completion.d
existem ~ 200 scripts adicionais para vários outros comandos ( openssl
, mutt
, mount
...) totalizando 25537 linhas ou 1.2 MB. Cada script, quando originado, verifica se um comando está realmente disponível antes de definir manipuladores de conclusão; ~ 330 vezes neste caso, cada um dos quais envolve a verificação de $PATH
para um arquivo executável com um determinado nome. (Embora eu espere que /usr/bin
seja armazenado em cache na memória ...)
É verdade que mesmo isso leva apenas meio segundo para carregar, não dois segundos completos. Mas pode ser pelo menos parte do problema. Execute du -hs /etc/bash_completion*
ou wc -l /etc/bash_completion{,.d/*} | grep total
se quiser verificar.
Você pode tentar manualmente fazer o sourcing do script, no modo "trace":
set -x
. /etc/bash_completion
Você verá cada linha conforme ela é executada. Se houver um comando em particular que demore muito tempo, você deve perceber isso.
( set +x
desativa o modo de rastreamento.)