Kiedy uruchamiam program bez podania pełnej ścieżki do pliku wykonywalnego, a Bash musi przeszukać katalogi w $PATH
celu znalezienia pliku binarnego, wydaje się, że Bash pamięta ścieżkę w jakiejś pamięci podręcznej. Na przykład zainstalowałem kompilację Subversion ze źródła do /usr/local
, a następnie napisałem svnsync help
w wierszu polecenia Bash. Bash zlokalizował plik binarny /usr/local/bin/svnsync
dla „svnsync” i wykonał go. Następnie, kiedy usunąłem instalację Subversion /usr/local
i uruchomiłem ponownie svnsync help
, Bash odpowiada:
bash: /usr/local/bin/svnsync: No such file or directory
Ale kiedy uruchamiam nową instancję Bash, wyszukuje i wykonuje /usr/bin/svnsync
.
Jak wyczyścić pamięć podręczną ścieżek do plików wykonywalnych?
bash
executable
cache
Daniel Trebbien
źródło
źródło
Odpowiedzi:
bash
buforuje pełną ścieżkę do polecenia. Możesz sprawdzić, czy polecenie, które próbujesz wykonać, jest mieszane za pomocątype
polecenia:Aby wyczyścić całą pamięć podręczną:
Lub tylko jeden wpis:
Aby uzyskać dodatkowe informacje, skontaktuj się
help hash
iman bash
.źródło
csh
, polecenie torehash
.rehash
polecenie działa również dlazsh
.hash svnsync
.Aby usunąć tylko jeden wpis, potrzebujesz innej flagi:
-r
Flaga nie bierze parametr i zawsze usunąć całą pamięć podręczną.(Przynajmniej w bash 3.2.39 na Debianie Lennym)
źródło
Istnieją rozwiązania niewymienione tutaj.
Możesz wyłączyć haszowanie za pomocą
set +h
lubset +o hashall
help set
mówi:Możesz sprawdzić, czy polecenie znalezione w tabeli skrótów istnieje, zanim spróbujesz je wykonać
shopt -s checkhash
help shopt
mówi:Możesz powiązać NAME z PATH za pomocą
hash -p PATH NAME
lubBASH_CMDS[NAME]=PATH
:Magia:
PATH="$PATH"
wykonujehash -r
Od
variables.c
:Próbować:
źródło
Jak zauważył użytkownik johntex w komentarzu do odpowiedzi użytkownika Tobu , najprostszym praktycznym działaniem w Bash jest ponowne przetworzenie tylko twojego programu:
To wszystko.
źródło