Например:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Какая разница? В обоих случаях node
и foo
являются недопустимыми командами, но кажется, что Unix просто не может найти node
двоичный файл? При удалении программы, например node
, есть ли способ очистить это, чтобы я получил
$ node
-bash: node: command not found
РЕДАКТИРОВАТЬ:
Результаты от type
команды:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
иtype foo
(хотя, вероятно, только первый действительно полезен).Ответы:
Это потому, что
bash
запомнили расположение вашей команды, сохраните ее в хеш- таблице.После того, как вы удалили
node
, хеш-таблица не очищается,bash
все еще думает оnode
том/usr/local/bin/node
, что, пропускаяPATH
поиск и вызывая/usr/local/bin/node
напрямую, используяexecve()
. Поскольку, когдаnode
его больше нет,execve()
возвращаетENOENT
ошибку, значит, нет такого файла или каталога,bash
сообщил об этой ошибке вам.В
bash
, вы можете удалить запись из хеш-таблицы:или удалите всю хеш-таблицу ( работает во всех оболочках POSIX ):
источник
/usr/local/bin/node
что отсутствует; если этот файл представляет собой динамически связанный исполняемый файл и одна из зависимостей отсутствует, вы получите то же сообщение «Нет такого файла или каталога». Это может свести вас с ума, пока вы не попробуетеldd
этот файл.progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(или это может быть не bash в данном конкретном случае, ноld-linux.so
).execve
запись в стандартный вывод , как побочный эффект при сбое вероятно, нарушит POSIX или что-то в этом роде)/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.Я обнаружил в Ubuntu Linux 16.04, что «Нет такого файла или каталога» означает, что вам нужно переключить текущий рабочий каталог, в то время как «команда не найдена» означает, что вы должны использовать apt-get install xxxyyy_zzz для решения проблемы.
источник