Для тех , кто приходят к выводу , что время запуска новых снарядов на MacOS слишком медленно для них это решение.
Я только что обнаружил, что на самом деле есть два пакета, которые можно установить через brew
. Я годами устанавливал пакет bash-completion
и никогда не задумывался об этом, хотя за это время я перешел с Bash 3 на 4 и теперь на 5. Время от времени, тем не менее, я возвращался к проблеме, часто натыкаясь на это самое обсуждение StackOverflow.
Есть еще один пакет, bash-completion@2
!
Какая разница? bash-completion
для Bash версии 3.2. bash-completion@2
extension @ 2 предназначен для Bash версии 4.1+ и 5. MacOS уже давно поставляется с Bash> 4.1.
При удалении старого пакета bash-completion
и установка bash-completion@2
мое время запуска оболочки упала с 605ms до 244ms. Это огромное улучшение скорости.
Я подозреваю, что многие из нас совершают эту же ошибку, так как статистические brew info
показывают, что у первого есть тонны установок, а у последнего так мало:
Следует отметить, что текущий выбранный ответ упоминает закомментирование некоторых строк, что обеспечивает лишь незначительное улучшение времени запуска (если используется старый пакет bash-completion
, который, вероятно, есть у многих), но никак не влияет на новый bash-completion@2
: новый пакет быстрый, несмотря ни на что. Это означает, что никаких взломов не требуется.
TL; DR:
brew uninstall bash-completion && brew install bash-completion@2
Не забудьте обновить исходный путь до файла завершения в файле .bashrc
или .bash_profile
.
Источники:
Поскольку тема несколько связана, я часто использую утилиту rclone
, поэтому она установлена. Он также имеет самый большой файл завершения, который я когда-либо видел. Удаление этого сокращает время запуска моей оболочки до ~ 120 мс, что очень быстро.
Редактировать:
Для тех, кому нужны технические подробности, объясняющие эту проблему, я подробно писал об этом на форумах Homebrew. Подводя итог, причина того, что bash-completion@2
намного быстрее происходит потому , что была написана так , что она больше не охотно не загружает все файлы завершения; вместо этого он загружает файл завершения по требованию, или, как описывает его автор, загружает их без лишних усилий.