Завершение Bash заставляет удар медленно запускаться

Запуск удара в моей системе человечности занимает приблизительно 2 секунды. Если я удаляю загрузку/etc/bash_completition в .bashrc, это запускается незамедлительно. Конечно, я не хочу бросать completition, и я не думаю, загружая тот файл, законная причина задержки 2 секунд.

Любые идеи, как я могу узнать то, что проблема или как я могу ускорить вещи.

15
задан 07.04.2011, 14:00

1 ответ

Обновление в 2013: большая часть завершения удара была переписана для автозагрузки завершений только при необходимости. Базовый сценарий намного легче теперь.


Сценарий завершения может иногда быть огромным в стандартах сценария оболочки. На серверах у меня есть доступ к, это - почти 1 700 строк (57 КБ), и это - просто базовый сценарий. В /etc/bash_completion.d существует ~200 дополнительных сценариев для различных других команд (openssl, mutt, mount...) в общей сложности 25 537 строк или 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 отключает режим трассировки.)

8
ответ дан 07.12.2019, 11:03

Теги

Похожие вопросы