Atualização em 2013: a maior parte da conclusão do bash foi reescrita para carregar automaticamente conclusões apenas quando necessário. O script principal é muito mais ligeiro agora.
Às vezes, o script de conclusão pode ser enorme nos padrões de script de shell. Nos servidores em que tenho acesso, são quase 1700 linhas (57 KB) e esse é apenas o script principal . Em /etc/bash_completion.d
há ~ 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 os manipuladores de conclusão; ~ 330 vezes neste caso, cada uma das quais envolve a verificação $PATH
de um arquivo executável com um determinado nome. (Embora eu esperasse /usr/bin
ser armazenado em cache na memória ...)
É certo que mesmo isso leva apenas meio segundo para carregar, e 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 você deseja verificar.
Você pode tentar obter o script manualmente, no modo "rastreio":
set -x
. /etc/bash_completion
Você verá cada linha conforme é executada. Se houver um comando específico que leva muito tempo, você deve notá-lo.
( set +x
desativa o modo de rastreamento.)