我在使用 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
并修复了这个问题。