/usr/local/bin 首先在 PATH 中,但首先在 /usr/bin 中找到可执行文件

hit*_*wen 4 paths cmake

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

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

buildbot@ip:~$ cmake --version
cmake version 2.8.7
Run Code Online (Sandbox Code Playgroud)

所以,不同的用户在执行不同的版本,好吧,让我们看看他们在哪里:

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

buildbot@ip:~$ which cmake
/usr/bin/cmake
Run Code Online (Sandbox Code Playgroud)

所以似乎我需要修复 buildbot 用户的路径,但是:

buildbot@ip:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

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

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

hit*_*wen 5

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
Run Code Online (Sandbox Code Playgroud)

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

$ /usr/local/bin/cmake --version
-bash: /usr/local/bin/cmake: Permission denied
Run Code Online (Sandbox Code Playgroud)

所以这个用户没有访问那个文件的权限。

我重新安装cmake并修复了它。