Beispielsweise:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Was ist der Unterschied? In beiden Fällen node
und foo
sind ungültige Befehle, aber es scheint, als ob Unix die node
Binärdatei einfach nicht finden kann ? Bei der Deinstallation eines Programms gibt es zB node
eine Möglichkeit, dieses aufzuräumen, damit ich es bekomme
$ node
-bash: node: command not found
BEARBEITEN:
Ergebnisse vom type
Befehl:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
und aktualisierentype foo
(obwohl wahrscheinlich nur die erste wirklich hilfreich ist).Antworten:
Das liegt daran,
bash
dass Sie sich an Ihren Befehlsspeicherort erinnert haben und ihn in einer Hash- Tabelle speichern .Nach der Deinstallation
node
wird die Hash-Tabelle nicht gelöscht, sondern es wirdbash
weiterhinnode
an/usr/local/bin/node
gedacht, diePATH
Suche zu überspringen und/usr/local/bin/node
direkt mit aufzurufenexecve()
. Da, wennnode
nicht mehr da ist, Fehlerexecve()
zurückgibtENOENT
, bedeutet dies, dass keine solche Datei oder kein solches Verzeichnisbash
diesen Fehler an Sie gemeldet hat.In
bash
können Sie einen Eintrag aus der Hash-Tabelle entfernen:oder entfernen Sie die gesamte Hash-Tabelle ( funktioniert in allen POSIX-Shell ):
quelle
/usr/local/bin/node
fehlen muss. Wenn es sich bei dieser Datei um eine dynamisch verknüpfte ausführbare Datei handelt und eine der Abhängigkeiten fehlt, wird die Meldung "Keine solche Datei oder Verzeichnis" angezeigt. Dies kann Sie verrückt machen, bis Sieldd
diese Datei anprobieren .progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(oder es könnte in diesem speziellen Fall nicht bash sein, aberld-linux.so
).execve
Schreiben an stderr als Nebeneffekt bei einem Fehler) würde wahrscheinlich gegen POSIX verstoßen oder so)/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.Ich habe unter Ubuntu Linux 16.04 festgestellt, dass "Keine solche Datei oder kein solches Verzeichnis" bedeutet, dass Sie Ihr aktuelles Arbeitsverzeichnis wechseln müssen, während "Befehl nicht gefunden" bedeutet, dass Sie apt-get install xxxyyy_zzz verwenden müssen, um das Problem zu beheben.
quelle