/usr/local/bin primeiro em PATH, mas executável em /usr/bin encontrado primeiro

/usr/local/bin primeiro em PATH, mas executável em /usr/bin encontrado primeiro

Estou tendo um problema estranho com um servidor Ubuntu 12.04:

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

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

Então, usuários diferentes estão executando versões diferentes, ok, vamos ver onde eles estão localizados:

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

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

Parece que preciso corrigir o caminho do usuário do buildbot, mas:

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

/usr/local/binjá é antes /usr/bin, como posso resolver isso?

Não consigo desinstalar o cmakepacote porque outros pacotes dependem dele e não posso atualizá-lo por meio de repositórios porque a última versão não está disponível nos repositórios 12.04.

Responder1

A explicação foi dada pelo hashcomando:

O comando hash mantém uma tabela hash, que contém os nomes dos caminhos do comando usado. Quando você executa um comando, ele procura um comando na variável $PATH. Mas se o comando estiver disponível na tabela hash, ele pega a partir daí e o executa.

Você pode excluir um comando específico de uma tabela hash usando a opção -d

Então eu fiz:

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

Por que não está encontrando /usr/local/bin/cmake?

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

Portanto, este usuário não tinha permissão para acessar esse arquivo.

Eu reinstalei cmakee isso resolveu.

informação relacionada