Как очистить кэш кэша Bash от исполняемых файлов?

Когда я запускаю программу без указания полного пути к исполняемому файлу, а Bash должен искать каталоги в $PATH для поиска двоичного кода, кажется, что Bash запоминает путь в каком-то кеше. Например, я установил сборку Subversion из источника в /usr/local , а затем набрал svnsync help в приглашении Bash. Bash располагал двоичный /usr/local/bin/svnsync для «svnsync» и выполнял его. Затем, когда я удалил установку Subversion в /usr/local и перезапустил svnsync help , Bash отвечает:

 bash: /usr/local/bin/svnsync: No such file or directory 

Но, когда я запускаю новый экземпляр Bash, он находит и выполняет /usr/bin/svnsync .

Как очистить кеш путей от исполняемых файлов?

4 Solutions collect form web for “Как очистить кэш кэша Bash от исполняемых файлов?”

bash кэширует полный путь к команде. Вы можете проверить, что команда, которую вы пытаетесь выполнить, хэшируется с помощью команды type :

 $ type svnsync svnsync is hashed (/usr/local/bin/svnsync) 

Чтобы очистить весь кеш:

 $ hash -r 

Или только одна запись:

 $ hash -d svnsync 

Для получения дополнительной информации обратитесь к help hash и man bash .

Чтобы очистить только одну запись, вам нужен другой флаг:

 hash -d svnsync 

Флаг -r не принимает параметр и всегда удаляет весь кеш.
(По крайней мере, в bash 3.2.39 на Debian Lenny)

Есть решения, не упомянутые здесь.

  1. Вы можете отключить хеширование с помощью set +h или set +o hashall

    help set говорит:

    -h – Помните расположение команд по мере их поиска на исполнение. Это включено по умолчанию.

    hashall – То же, что и -h

     set -h # enable hashing shopt -u checkhash # disable command existence check hash -p /some/nonexisting/dir/date date # bind date with /some/nonexisting/dir/date date # bash: /some/nonexisting/dir/date: No such file or directory set +h date # normal date output 
  2. Вы можете проверить, существует ли команда, найденная в хэш-таблице, перед тем, как попытаться выполнить ее с помощью shopt -s checkhash

    help shopt говорит:

    checkhash – если установлено, bash проверяет, существует ли команда, найденная в хэш-таблице, перед тем, как ее выполнить. Если хешированная команда больше не существует, выполняется обычное отслеживание пути.

     set -h # enable hashing shopt -u checkhash # disable command existence check hash -p /some/nonexisting/dir/date date # bind date with /some/nonexisting/dir/date hash -t date # prints /some/nonexisting/dir/date date # bash: /some/nonexisting/dir/date: No such file or directory shopt -s checkhash # enable command existence check date # normal date output hash -t date # prints /bin/date 
  3. Вы можете связать NAME с PATH с hash -p PATH NAME или BASH_CMDS[NAME]=PATH :

     shopt -u checkhash # disable command existence check hash -p /some/nonexisting/dir/date date date # bash: /some/nonexisting/dir/date: No such file or directory BASH_CMDS[date]=/bin/date date # normal date output 
  4. Magic: PATH="$PATH" выполняет hash -r

    Из variables.c :

     /* What to do just after the PATH variable has changed. */ void sv_path (name) char *name; { /* hash -r */ phash_flush (); } 

    Пытаться:

     set -h hash -r date hash # prints 1 /bin/date PATH="$PATH" hash # prints hash: hash table empty 

Как отметил пользователь johntex в комментарии к ответу пользователя Tobu , самым простым практическим действием в Bash является переосмысливание только вашей программы:

 hash svnsync 

Это все.

  • Увеличение ограничения размера для / var / cache / apt / archives
  • Случайные сбои приложений в Linux
  • Какая память не используется процессами и освобождается `echo 3> / proc / sys / vm / drop_caches`?
  • Как остановить экземпляр CACHE из Shell Script
  • Доступ к кешу файловой системы, который не находится в оперативной памяти, но диск на диске уже выпущен
  • Измерьте скорость чтения (), чтения () на жестком диске без кеширования в QNX 6.5
  • Выброс кеша каталогов, несмотря на наличие большого количества памяти?
  • Есть ли у bash встроенная команда кэширования (вроде как mktemp или sponge)?
  • Почему объекты плиты не возвращаются автоматически
  • TLB кэширование, когда страница выгружается
  • Уточнение, пожалуйста, на медленном диске трюк
  • Linux и Unix - лучшая ОС в мире.