Есть ли команда, чтобы csh перечитал все каталоги на вашем пути во FreeBSD?

664
Warren P

У меня странная проблема во FreeBSD9 с использованием cshмоей оболочки. Недавно установленные программы, которые находятся на моем пути, будут запускаться только в том случае, если я перезапущу cshоболочку. Я нахожу это действительно раздражающим.

Я думаю, что cshищет пути один раз и не переоценивает их, пока вы не выйдете из него. Как вы заставляете его обновляться? Есть ли что-то, что вы можете вставить, .cshrcчтобы это перестало делать это? (Я привык к bash, и я не вижу ничего подобного в bash.)

1

2 ответа на вопрос

3
Nicole Hamilton

The Unix C shell hashes your search path directories to help it find executables faster. But it develops blind spots if you add new executables to those directories after it's already done its hash. The solution is to use the rehash command to tell it to rebuild its hash. Alternately, you can turn off the path hash entirely (taking a slight performance hit) using the unhash command.

(Fwiw, I agree this is annoying behavior. I use a path hash in my own Hamilton C shell, but mine is smart enough to discover blind spots and repair them automatically.)

Меня удивляет, что у каждого экземпляра оболочки есть свой хэш. Я предполагаю, что каждая оболочка МОЖЕТ иметь свой собственный путь, даже если тот же .cshrc создал начальный путь, так что я думаю, что это неизбежно. Warren P 11 лет назад 0
Хеш создается в памяти каждым экземпляром оболочки C при сканировании каталогов пути. Имейте в виду, что каждый процесс получает свою собственную копию переменных среды (включая PATH) и может изменять их, не затрагивая другие процессы. Nicole Hamilton 11 лет назад 0
Я помню, как читал статью о вашей оболочке в DDJ в начале 1990-х. Я думаю, что это был тот: http://www.drdobbs.com/cpp/examining-the-hamilton-c-shell/184408480 OS / 2 ... Вау. Воспоминания. Warren P 11 лет назад 0
Да, это моя оболочка C Тогда у меня было другое имя, но это я. Кто знал, что 25 лет спустя я все еще буду работать над этим, все еще добавляя функции и поддержку новых выпусков Windows. Nicole Hamilton 11 лет назад 0
Ницца! Я попробовал демо-версию x64 на Win8 RTM только сейчас. Я рад сообщить, что, кажется, работает очень хорошо. Некоторые отзывы: я скучаю по «человеку» при работе в этой среде, по сравнению с Cygwin. Я не могу продвинуться далеко в BSD-подобных оболочках без человека. И сш. И этот термос, и эта игра в бадминтон. И это ВСЕ, что мне нужно. :-) Warren P 11 лет назад 0
Я рад, что тебе это нравится. Все утилиты имеют онлайн-справку с `-h`. Если вы все еще предпочитаете `man`, попробуйте` alias man (^! ^!: ^^ -h | mi) `. Вы также можете нажать клавишу F1, чтобы открыть руководство пользователя по гипертексту в вашем браузере. Nicole Hamilton 11 лет назад 0
0
N. Ngo

Если вы используете текущую версию tcsh(в настоящее время у меня есть tcsh 6.20.00 (Astron) 2016-11-24), вы можете set autorehash(например, в своей ~/.cshrcили по приглашению) включить автоматическое повторное сканирование каталогов `path ', если это необходимо (например, bash). По справочной странице по tcsh:

 autorehash (+) If set, the internal hash table of the contents of the directories in the path variable will be recomputed if a command is not found in the hash table.  In addition, the list of available commands will be rebuilt for each command completion or spelling correction attempt if set to `complete' or `correct'  respectively; if set to `always', this will be done for both cases. 

Хотя есть некоторые крайние случаи, как отмечено в разделе rehashкоманд справочной страницы tcsh:

rehash Causes the internal hash table of the contents of the directories in the path variable to be recomputed. ... With autorehash, a new command will be found automatically, except in the special case where another command of the same name which is located in a different directory already exists in the hash table. Also flushes the cache of home directories built by tilde expansion.