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

1232
Jason R. Mick

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

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

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

3

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

6
RedGrittyBrick

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

Нужно ли это делать каждый раз, когда новая программа устанавливается, например, через менеджер пакетов? Daniel Andersson 12 лет назад 1
@DanielAndersson: Почти наверняка, если вы используете tcsh. RedGrittyBrick 12 лет назад 2
\ * дрожит \ * :-) Daniel Andersson 12 лет назад 0
Обычно я использую Bash, поэтому, возможно, именно поэтому я никогда не замечал этого раньше ... очевидно, tcsh был моей оболочкой по умолчанию для ярлыка стандартного терминала в CentOS 6.2 ... (или, по крайней мере, той версии, которая у меня была). :) Jason R. Mick 12 лет назад 0
@DanielAndersson В этом нет необходимости, если устанавливается новая команда, которой раньше не было. Michael Mior 9 лет назад 0
0
Daniel Andersson
$ 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самим собой. Там должны быть другие переменные в игре.

Видимо, tcsh работает по-другому (см. Выше) ... Jason R. Mick 12 лет назад 0