1

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

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

2 ответа2

3

Оболочка Unix C хэширует ваши каталоги путей поиска, чтобы помочь ей быстрее находить исполняемые файлы. Но он создает "слепые зоны", если вы добавляете новые исполняемые файлы в эти каталоги после того, как они уже сделали хеш. Решение состоит в том, чтобы использовать команду rehash чтобы сказать ей перестраивать свой хэш. Кроме того, вы можете полностью отключить хэш пути (с небольшим падением производительности) с помощью команды unhash .

(Согласен, я согласен, что это раздражающее поведение. Я использую хеш-путь в своей собственной оболочке Hamilton C, но мой достаточно умен, чтобы обнаруживать мертвые зоны и автоматически их исправлять.)

0

Если вы используете текущую версию 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .