/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たら問題は解決しました。

関連情報