Dla każdego, kto dojdzie do wniosku, że czasy uruchamiania nowych powłok w systemie MacOS są dla nich zbyt wolne, jest to rozwiązanie .
Właśnie odkryłem, że w rzeczywistości istnieją dwa pakiety, które można zainstalować brew
. Instaluję bash-completion
pakiet od lat i nigdy nie zadałem sobie trudu, aby go zakwestionować, mimo że w tym czasie przeszedłem z Bash 3, 4, teraz 5. Jednak od czasu do czasu wracam do problemu , często napotykam na tę dyskusję StackOverflow.
Jest kolejna paczka bash-completion@2
!
Co za różnica? bash-completion
dotyczy wersji Bash 3.2. bash-completion@2
dotyczy wersji Bash 4.1+ i 5.
Po usunięciu starego bash-completion
pakietu i zainstalowaniu bash-completion@2
mój czas uruchamiania powłoki spadł z 605 ms do 244 ms. To ogromna poprawa prędkości.
Podejrzewam, że wielu z nas popełnia ten sam błąd, ponieważ brew info
statystyki pokazują, że ten pierwszy ma mnóstwo instalacji, podczas gdy drugi ma tak mało:
Należy zauważyć, że obecnie wybrana odpowiedź wspomina o komentowaniu niektórych wierszy, co zapewnia jedynie niewielką poprawę czasów uruchamiania (jeśli używa się starego bash-completion
pakietu, którym prawdopodobnie wielu jest), ale nie ma żadnego wpływu na nowy bash-completion@2
pakiet: ten nowy pakiet jest szybki bez względu na wszystko. Oznacza to, że nie wymaga hackowania.
TL; DR:
brew uninstall bash-completion && brew install bash-completion@2
Pamiętaj, aby zaktualizować ścieżkę źródłową do pliku zakończenia w pliku .bashrc
lub .bash_profile
pliku.
Źródła:
Jako temat nieco powiązany, rclone
często używam tego narzędzia, więc jest zainstalowane. Zdarza się również, że ma największy plik ukończenia, jaki kiedykolwiek widziałem . Usunięcie go skraca czas uruchamiania mojej powłoki do ~ 120 ms, co jest bardzo szybkie.
Edytować:
Dla każdego, kto chce poznać szczegóły techniczne wyjaśniające ten problem, pisałem o tym obszernie na forach Homebrew . Podsumowując, powodem, który bash-completion@2
jest o wiele szybszy, jest to, że został napisany tak, że nie chętnie ładuje już wszystkich plików ukończenia; zamiast tego ładuje plik ukończenia na żądanie lub, jak opisuje go autor, ładuje je w nieskory sposób.