Что делает `hash -r 2`? - PullRequest
       6

Что делает `hash -r 2`?

0 голосов
/ 23 октября 2019

Я нашел этот код в файле virtualenv activate:

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
    hash -r 2>/dev/null
fi

hash -r 2 выдает ошибку как в bash, так и в zsh. Как работает этот код? Как этот код забывает прошлые команды? Почему $PATH изменения могут не соблюдаться, если мы не забываем прошлые команды? Можете ли вы показать мне пример?

1 Ответ

1 голос
/ 23 октября 2019

Команда не

hash -r 2

, а скорее

hash -r

2 является частью стандартного перенаправления ошибок на /dev/null,который по существу выбрасывает вывод ошибок.

Вы можете прочитать о версии Bash встроенной hash в man bash. Вот соответствующий фрагмент:

Любое ранее запомненное имя пути отбрасывается. Если указана опция -p, поиск пути не выполняется, а имя файла используется в качестве полного имени файла команды. Опция -r заставляет оболочку забыть все запомненные места.

...