“哪个”程序需要刷新 Shell 才能看到新安装的程序?

“哪个”程序需要刷新 Shell 才能看到新安装的程序?

为什么 Linux 程序which要求您刷新 shell(例如tcsh在终端中输入)才能查看路径中安装的新程序?

我很困惑为什么我无法访问一个程序,该程序具有与其他程序相同的权限usr/local/binwhich可以清楚地看到。

有人可以用外行人能理解的语言向我解释一下这是如何运作的吗?

答案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。一定有其他变量在起作用。

相关内容