3

Почему программа Linux, which требует обновления оболочки (например, введите tcsh в терминале), чтобы увидеть новые программы, установленные на вашем пути ??

Я был озадачен, почему я не смог получить доступ к программе, которая имела те же права доступа, что и другие программы в usr/local/bin , which могли ясно видеть.

Может кто-нибудь объяснить, как это работает для меня с точки зрения непрофессионала?

2 ответа2

6

Попробуй rehash

man tcsh говорит

   rehash  Causes  the internal hash table of the contents of the directo-
           ries in the path variable to be recomputed.  This is needed  if
           new  commands  are  added  to directories in path while you are
           logged in.  This should be necessary only if you  add  commands
           to  one  of  your  own  directories, or if a systems programmer
           changes the contents of one of the  system  directories.   Also
           flushes the cache of home directories built by tilde expansion.

В терминах непрофессионала: tcsh хочет предоставить быстрый ответ, поэтому он строит внутреннюю таблицу (предположительно хеш-таблицу) команд и где они должны быть найдены. Предположительно, это происходит при запуске. К сожалению, он не имеет никакого механизма, чтобы замечать, когда вы или администратор делаете что-то, что потребует обновления этой таблицы.

Это одна из многих причин, почему я предпочитаю ksh или bash производным csh.

0
$ which test
/usr/bin/test
$ ls ~/bin/test
ls: cannot access bin/test: No such file or directory
$ touch ~/bin/test
$ chmod 755 ~/bin/test
$ which test
/home/daniel/bin/test
$

Нет обновления оболочки не требуется , используя Bash, так что не имеет отношения к which сам по себе. Там должны быть другие переменные в игре.

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