
У меня возникла странная проблема с сервером 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
и это исправило проблему.