为什么 Linux 程序which
要求您刷新 shell(例如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 时不需要刷新 shell,因此它本身与此无关which
。一定有其他变量在起作用。