/usr/local/bin 在 PATH 中排在第一位,但 /usr/bin 中的可执行文件首先被发现

/usr/local/bin 在 PATH 中排在第一位,但 /usr/bin 中的可执行文件首先被发现

我在使用 Ubuntu 12.04 服务器时遇到了一个奇怪的问题:

hithwen@ip:~$ cmake --version
cmake version 2.8.12.2

buildbot@ip:~$ cmake --version
cmake version 2.8.7

因此,不同的用户正在执行不同的版本,好的,让我们看看它们位于哪里:

hithwen@ip:~$ which cmake
/usr/local/bin/cmake

buildbot@ip:~$ which cmake
/usr/bin/cmake

因此看来我需要修复 buildbot 用户的路径但是:

buildbot@ip:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

/usr/local/bin已经是之前了/usr/bin,我该如何解决这个问题?

我无法卸载该cmake软件包,因为其他软件包依赖于它,而且我无法通过存储库升级它,因为最新版本在 12.04 存储库中不可用。

答案1

以下命令给出了解释hash

hash 命令维护一个哈希表,其中包含所用命令的路径名。执行命令时,它会在变量 $PATH 中搜索命令。但如果该命令在哈希表中可用,它会从那里挑选并执行它。

您可以使用 -d 选项从哈希表中删除特定命令

所以我做了:

buildbot@ip:~$ hash
hits    command
   3    /usr/bin/which
   1    /usr/bin/vim
   2    /usr/bin/cmake

buildbot@ip:~$ $ hash -d cmake
buildbot@ip:~$ hash
hits    command
   4    /usr/bin/which
   1    /usr/bin/vim
buildbot@ip:~$ cmake --version
cmake version 2.8.7
buildbot@ip:~$ which cmake
/usr/bin/cmake

为什么找不到/usr/local/bin/cmake

$ /usr/local/bin/cmake --version
-bash: /usr/local/bin/cmake: Permission denied

因此该用户无权访问该文件。

我重新安装cmake并修复了这个问题。

相关内容