«какой» программе требуется обновление оболочки для просмотра недавно установленных программ?

«какой» программе требуется обновление оболочки для просмотра недавно установленных программ?

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

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

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

решение1

Пытаться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.

решение2

$ 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само по себе не связано. Должны быть другие переменные.

Связанный контент