Na przykład:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Co za różnica? W obu przypadkach, node
a foo
są nieprawidłowe polecenia, ale wydaje się, Unix po prostu nie może znaleźć node
pliku binarnego? Podczas odinstalowywania programu, na przykład node
, istnieje sposób, aby to wyczyścić, aby uzyskać
$ node
-bash: node: command not found
EDYTOWAĆ:
Wyniki z type
polecenia:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
itype foo
prawdopodobnie tylko pierwszy naprawdę jest pomocny).Odpowiedzi:
To dlatego, że
bash
zapamiętałeś lokalizację polecenia, przechowuj ją w tabeli skrótów .Po odinstalowaniu
node
tabela skrótów nie jest czyszczona,bash
nadal myśli , żenode
jest/usr/local/bin/node
, pomijającPATH
wyszukiwanie i dzwoniąc/usr/local/bin/node
bezpośrednio, używającexecve()
. Ponieważ kiedynode
już go nie ma,execve()
zwracaENOENT
błąd, co oznacza, że nie ma takiego pliku lub katalogu,bash
zgłosił ten błąd.W
bash
możesz usunąć wpis z tabeli skrótów:lub usuń całą tablicę skrótów ( działa we wszystkich powłokach POSIX ):
źródło
/usr/local/bin/node
tego brakować; jeśli plik ten jest dynamicznie połączonym plikiem wykonywalnym i brakuje jednej z zależności, pojawi się ten sam komunikat „Brak takiego pliku lub katalogu”. To może doprowadzić cię do szaleństwa, dopóki nie spróbujeszldd
tego pliku.progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(lub może nie być bash w tym konkretnym przypadku, aleld-linux.so
).execve
pisanie do stderr jako efekt uboczny w przypadku awarii prawdopodobnie naruszyłoby POSIX czy coś takiego/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.W systemie Ubuntu Linux 16.04 znalazłem, że „Brak takiego pliku lub katalogu” oznacza, że musisz zmienić bieżący katalog roboczy, a „nie znaleziono polecenia” oznacza, że musisz użyć apt-get install xxxyyy_zzz, aby rozwiązać problem.
źródło