Як отримати bash для автоматичного оновлення кешу місць розташування програм?


2

Я знаю про внутрішню команду bash hash і як можна користуватися hash -d або hash -r забути згадані місця. Чи є спосіб доручити bash автоматично робити це, коли отримує "пропущення кеш-пам’яті", тобто коли згадане місце зникне ( no such file or directory ) bash очистили б розташування, що запам'яталося, і спробуйте знову?

Відповіді:


6

Цього можна досягти за допомогою checkhash опція:

shopt -s checkhash

checkhash
    If set, bash checks that a command found in the hash table exists
    before trying to execute it.  If  a  hashed  command  no longer
    exists, a normal path search is performed.

Ви можете зробити цю опцію для всіх оболонок bash, помістивши її в BASHOPTS змінна середовища:

BASHOPTS
    A colon-separated list of enabled shell options.
    Each word in the list is a valid argument for the
    -s option to the shopt builtin command.

Встановлення цього параметра може трохи уповільнити виконання bash, оскільки майже весь час додатковий тест не потрібний. Однак, я не думаю, що вартість тесту є значною.


1
Вартість тесту є релевантною (кожний доступ до диска == затримки), але ви порівнюєте цю вартість із вартістю пошуку всього PATH для файлу. Схоже, для надання функції, яку хотів би запитник.
Slartibartfast

1
@slartibartfast: погодився. Як я вже сказав, вартість, мабуть, незначна.
rici

Спасибі, це саме те, що я хотів. Цікаво, чи є Linux dists з цим параметром, встановленим як типовий?
Gerry Lufwansa

@GerryLufwansa: Я сумніваюся в цьому, але навряд чи це виглядає як вирішальна функція для вибору дистрибутива. Це лише один рядок для додавання до вашого файлу запуску bash (хоча з'ясовується, який файл може бути викликом для деяких дистрибутивів).
rici
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.