从 PATH 中删除重复名称后,Shell 无法找到可执行文件?

从 PATH 中删除重复名称后,Shell 无法找到可执行文件?

我已经编译了一个名为xxx的包。现在我已删除与xxx相关的文件并使用存储库进行安装。但是如果我输入命令[root]$ xxx,则会出现以下消息

-bash: /usr/local/bin/xxx: No such file or directory

如果我尝试,[root]$/usr/bin/xxx -v它就可以正常工作。我想更改安装位置。或者我想创建一个/usr/bin/指向的符号链接/usr/local/bin/xxx

答案1

为了加快路径名查找速度,shell 会保留一个内部缓存,将命令的短名称映射到其完整路径名。您可能在这里遇到这种情况。

您可以发出以下命令来检查程序当前的缓存路径:

hash -t xxx

这将指向现在丢失的可执行文件。您可以使用以下命令清除特定名称的缓存:

hash -r xxx

请注意,此问题只会影响在旧位置执行该命令的 shell 会话。任何新的 shell 会话都应具有清除的查找缓存并按预期找到该命令。

答案2

不,你不想做任何这些事情。让我来解释一下原因:

/usr/bin是安装来自存储库的应用程序的位置。 /usr/local/bin是默认安装已编译应用程序的位置。

当你make && make install一个应用程序时,你将需要覆盖存储库应用程序,因此/usr/local/bin已经在你$PATH和它先于 /usr/bin因此它被首先执行。

如果您输入它,which xxx它仍会输出,/usr/local/bin/xxx因为它仍然在您安装它的地方。问题rm $(which xxx)甚至更好,再次编译应用程序,但这次make uninstall以 root 身份发出。

相关内容