Pozyskuję bashrc kilku moich przyjaciół. Mam więc zduplikowane wpisy w mojej zmiennej $ PATH. Nie jestem pewien, czy taki jest problem w przypadku poleceń, których uruchomienie trwa długo. Jak $ PATH działa wewnętrznie w bash? Czy posiadanie większej liczby ŚCIEŻEK spowalnia mój czas uruchamiania?
45
zsh
, jest to tak proste, jaktypeset -aU path
, FWIW .Odpowiedzi:
Posiadanie większej liczby wpisów
$PATH
nie spowalnia bezpośrednio uruchamiania, ale spowalnia za każdym razem, gdy po raz pierwszy uruchamiasz określone polecenie w sesji powłoki (nie za każdym razem, gdy uruchamiasz polecenie, ponieważ bash utrzymuje pamięć podręczną). Spowolnienie jest rzadko wyczuwalne, chyba że masz szczególnie wolny system plików (np. NFS, Samba lub inny sieciowy system plików lub Cygwin).Zduplikowane wpisy są również trochę denerwujące, gdy przeglądasz
$PATH
wizualnie, musisz przedzierać się przez więcej cruft.Łatwo jest uniknąć dodawania duplikatów.
Uwaga dodatkowa: pozyskiwanie czyichś skryptów powłoki oznacza wykonywanie napisanego przez siebie kodu. Innymi słowy, dajesz swoim znajomym dostęp do konta, kiedy tylko chcą.
Uwaga dodatkowa:
.bashrc
nie jest właściwym miejscem do ustawienia$PATH
lub jakiejkolwiek innej zmiennej środowiskowej. Zmienne środowiskowe powinny być ustawione w~/.profile
. Zobacz Które pliki instalacyjne powinny być używane do konfigurowania zmiennych środowiskowych za pomocą bash? , Różnica między .bashrc i .bash_profile .źródło
case :$PATH:
i niecase $PATH
tak, że pasuje, nawet jeśli wpis jest pierwszy lub ostatni.Widziałem, jak ludzie usuwają duplikaty ze swojej zmiennej PATH
awk
i używają czegoś takiego:Możesz spróbować dodać to do własnego bashrc i upewnić się, że gdzieś pozyskałeś inne pliki przed uruchomieniem.
Alternatywą byłoby użyć na
pathmerge
użyteczność.Jeśli chodzi o problem z szybkością, nie wpłynie to znacząco na czas uruchamiania powłoki, ale może zaoszczędzić trochę czasu na wykonywaniu poleceń tabulacji dla poleceń, szczególnie gdy polecenie nie zostanie znalezione na ścieżce i powtórzy przeszukiwanie tego samego szukają folderów.
Uwaga na temat bezpieczeństwa: powinieneś naprawdę wziąć pod uwagę ostrzeżenia Gillesa dotyczące bezpieczeństwa tutaj. Pozyskując plik należący do innego użytkownika, dajesz tym użytkownikom bezpłatne hasło do wykonania własnego kodu jako użytkownik za każdym razem, gdy uruchamiasz powłokę. Jeśli nie ufasz tym użytkownikom swoim hasłem, nie powinieneś pozyskiwać ich plików powłoki.
źródło
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
to nie tylko kwestia kosmetyczna. Jest to to samo, co dodawanie.
do ścieżki, co jest potencjalnie niebezpieczne.Na podstawie odpowiedzi @Gilles możesz zawinąć ją w funkcję, aby zminimalizować pisanie:
źródło
Wykonywane jest tylko pierwsze dopasowanie
$PATH
, więc późniejsze wpisy nie są przetwarzane. Dlatego czasami powinieneś zmieniać kolejność wpisów w$PATH
swoim środowisku, aby środowisko działało zgodnie z oczekiwaniami.Aby odpowiedzieć na twoje pytanie: nie powinno to być przyczyną wolnego uruchamiania.
źródło
TAB
? W takim przypadku powinieneś sprawdzić, czy uzupełnienie definicji nie wyglądacomplete -c which -a
. Powinieneś usunąć-a
parametr. Można sprawdzić, że wydając polecenie:complete | grep which
.Aby zapobiec powielaniu wpisów w mojej ŚCIEŻCE, musiałem umieścić OBA w ~ / .bash_profile i ~ / .bashrc:
Główną wadą jest to, że sortuje wpisy PATH, ale myślę, że mogę z tym żyć.
źródło