Actualización en 2013: la mayor parte de la finalización de bash se reescribió a finalizaciones de carga automática solo cuando fue necesario. El guión central es mucho más ligado ahora.
El script de finalización a veces puede ser enorme en los estándares de script de shell. En uno de los servidores a los que tengo acceso, son casi 1700 líneas (57 KB) y ese es solo el script central . En /etc/bash_completion.d
hay ~ 200 secuencias de comandos adicionales para varios otros comandos ( openssl
, mutt
, mount
...) por un total de 25537 líneas o 1,2 MB. Cada secuencia de comandos, cuando se obtiene, verifica si un comando está realmente disponible antes de definir los controladores de finalización; ~ 330 veces en este caso, cada una de las cuales implica buscar $PATH
un archivo ejecutable con un nombre de pila. (Aunque esperaría /usr/bin
estar en la memoria caché ...)
Es cierto que incluso eso solo tarda medio segundo en cargarse, no dos segundos completos. Pero podría ser al menos parte del problema. Ejecutar du -hs /etc/bash_completion*
o wc -l /etc/bash_completion{,.d/*} | grep total
si quieres comprobarlo.
Puede intentar obtener manualmente el script, en modo "rastreo":
set -x
. /etc/bash_completion
Verá cada línea a medida que se ejecuta. Si hay un comando en particular que lleva mucho tiempo, debería notarlo.
( set +x
deshabilita el modo de seguimiento).