Kommando in bash kann nicht starten obwohl ‚which‘ es findet

Manchmal liegen Programme in verschiedenen Versionen vor und verlangen nach einem Ansatz der es erlaubt die verschiedenen Versionen relativ einfach zu starten.
Eine Möglichkeit ist es die PATH Umgebungsvariable so zu setzen, dass mehrere Verzeichnisse die das Programm beinhalten gelistet sind, z.B.

PATH=~/binNeu:~/binAlt

Ein fikives Programm testMe ,würde nun aus ~/binNeu starten. Wenn man nun temporär dieses Verzeichnis umbenennt, sollte testMe aus ~/binAlt gestartet werden.
Tatsächlich wird das auch vom which Kommando so angezeigt. Bei der Ausführung von testMe, gibt die bash erstaunlicherweise die Fehlermeldung aus, das ~/binNeu/testMe (!) nicht gefunden wird.

Grund dafür ist eine Cache-Hashtable welche die bash am Anfang anlegt um einen Programmstart zu beschleunigen. Und genau diesen muss man in diesem Fall mit folgendem Kommando löschen.

hash -r

Alternativ könnte man auch das File sourcen, welches direkt oder indirekt die PATH Variable setzt, oder schlicht die bash schließen und neustarten.

3 Gedanken zu „Kommando in bash kann nicht starten obwohl ‚which‘ es findet“

  1. Da in Ihrem Impressum leider eine E-Mail Adresse fehlt, versuche ich es auf diesem Weg…

    Ich habe Ihren Artikel „Unix für die Massen“ gelesen und mir sind einige Inhaltliche Fehler aufgefallen:

    Linux != Unix

    Die Aussage: „Um strikte POSIX Konformität von Linux zu gewährleisten sollte eine Distribution gewählt werden, die der LinuxStandardBase (LSB) entspricht.“
    Alle gängigen Linux-Distributionen halten sich an die LSB. Dennoch ist die LSB nicht mit POSIX gleichzusetzen, dass sind zwei Paar Schuhe.

    Siehe hier: http://de.wikipedia.org/wiki/Linux_Standard_Base#POSIX-Inkompatibilit.C3.A4t

    1. Stimmt, da war wohl der Wunsch Vater des Gedankens – ich hab die betreffende Passage geändert.

      Ob aber alle gängigen Distributionen sich an die LSB halten? Da wäre ich mir nicht sicher – eine Zertifizierung haben meines Wissens nur die Enterprise Distributionen (RHEL,SLES..) – früher auch die normalen SuSE Distros.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.