/usr/local/bin zuerst im Pfad, aber ausführbare Datei in /usr/bin zuerst gefunden

/usr/local/bin zuerst im Pfad, aber ausführbare Datei in /usr/bin zuerst gefunden

Ich habe ein seltsames Problem mit einem Ubuntu 12.04-Server:

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

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

Verschiedene Benutzer führen also unterschiedliche Versionen aus. Ok, sehen wir mal, wo sie sich befinden:

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

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

Also scheint es, als müsste ich den Pfad des Buildbot-Benutzers korrigieren, aber:

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

/usr/local/binist schon vorher /usr/bin, wie kann ich das lösen?

Ich kann das cmakePaket nicht deinstallieren, da andere Pakete davon abhängen, und ich kann es nicht über Repositories aktualisieren, da die letzte Version in den 12.04-Repos nicht verfügbar ist.

Antwort1

Die Erklärung lieferte der folgende hashBefehl:

Der Hash-Befehl verwaltet eine Hash-Tabelle, die die Pfadnamen der verwendeten Befehle enthält. Wenn Sie einen Befehl ausführen, sucht er in der Variable $PATH nach einem Befehl. Wenn der Befehl jedoch in der Hash-Tabelle verfügbar ist, greift er dort zu und führt ihn aus.

Sie können einen bestimmten Befehl aus einer Hash-Tabelle mit der Option -d löschen.

So tat ich:

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

Warum wird es nicht gefunden /usr/local/bin/cmake?

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

Dieser Benutzer hatte also keine Berechtigung, auf diese Datei zuzugreifen.

Ich habe es neu installiert cmakeund das hat das Problem behoben.

verwandte Informationen