Оновлення в 2013 році. Більшість баш-завершень було переписано для автоматичного завантаження завершень лише за потреби. Основний сценарій зараз набагато вищий.
Сценарій завершення іноді може бути величезним у стандартах сценарію оболонки. На одному сервері, до якого я маю доступ, це майже 1700 рядків (57 Кб), і це лише основний сценарій . В /etc/bash_completion.dє ~ 200 додаткові скрипти для різних інших команд ( openssl, mutt, mount...) на загальну суму 25537 ліній або 1,2 МБ. Кожен скрипт під час отримання джерела перевіряє, чи є команда фактично доступною, перш ніж визначати обробники завершення; ~ 330 разів у цьому випадку, кожен з яких включає перевірку $PATHна виконуваний файл із заданим іменем. (Хоча я б очікував, /usr/binщо це запам'ятовується в пам'яті ...)
Справді, навіть для завантаження цього потрібно лише півсекунди, а не дві повні секунди. Але це може бути хоча б частиною проблеми. Виконати du -hs /etc/bash_completion*або wc -l /etc/bash_completion{,.d/*} | grep totalякщо ви хочете перевірити.
Ви можете спробувати скрипт вручну в режимі "слід":
set -x
. /etc/bash_completion
Ви побачите кожен рядок, як він виконується. Якщо є певна команда, яка потребує тривалого часу, ви повинні її помітити.
( set +xвимикає режим відстеження.)