Когда вы вводите команду, если бы не было хеш-таблицы, оболочка проверила бы каждый каталог, указанный в $PATH
чтобы увидеть, есть ли там ваша команда.
Это может быть медленным процессом, если какой-либо из этих каталогов подключен к медленному устройству. Вы получите паузу каждый раз, когда вводите команду.
Итак, когда оболочка начинает работать, она читает каждый каталог в $PATH
и определяет, что представляют собой все исполняемые программы, а затем сохраняет этот список в хэш-таблице в памяти. Затем ему больше не нужно проверять их, и он может быстро узнать, действительна ли введенная вами команда или нет.
Это прекрасно работает, если вы никогда не добавляете и не удаляете программы, потому что, как только вы это сделаете, хеш-таблица устареет. Цель команды rehash
- попросить, чтобы оболочка снова пошла и прочитала список программ.
Вышесказанное относится к csh
и tcsh
.
С оболочкой bash
она не читает имена всех ваших программ при запуске. Он хранит хеш-таблицу, но помещает в нее только то, что вы вводите команды. Например:
bash-3.2$ ls
foo bar baz
bash-3.2$ cp
cp: missing file operand
Try `cp --help' for more information.
bash-3.2$ hash
hits command
1 /bin/cp
1 /bin/ls
Он запомнил расположение команд cp
и ls
.