Оновлення в 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
вимикає режим відстеження.)