Por ejemplo:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
¿Cual es la diferencia? En ambos casos, node
y foo
son comandos no válidos, pero parece que Unix simplemente no puede encontrar el node
binario? Al desinstalar un programa, por ejemplo node
, ¿hay alguna manera de limpiar esto para que pueda
$ node
-bash: node: command not found
EDITAR:
Resultados del type
comando:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
ytype foo
(aunque probablemente solo el primero sea realmente útil).Respuestas:
Eso es porque
bash
recordó la ubicación de su comando, guárdelo en una tabla hash .Después de la desinstalación
node
, la tabla hash no se borra,bash
todavía piensa quenode
está en/usr/local/bin/node
, omitiendo laPATH
búsqueda y llamando/usr/local/bin/node
directamente, usandoexecve()
. Dado que cuandonode
ya no existe,execve()
devuelve elENOENT
error, significa que no hay tal archivo o directorio, lebash
informó ese error.En
bash
, puede eliminar una entrada de la tabla hash:o elimine la tabla hash completa ( funciona en todos los shell POSIX ):
fuente
/usr/local/bin/node
que falta; si ese archivo es un ejecutable vinculado dinámicamente y falta una de las dependencias, recibirá el mismo mensaje "No existe tal archivo o directorio". Esto puede volverte loco hasta que pruebesldd
ese archivo.progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(o podría no ser bash en este caso en particular, perold-linux.so
).execve
escrito a stderr como efecto secundario en caso de fallo probablemente violaría POSIX o algo así)/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.En Ubuntu Linux 16.04 encontré que "No existe tal archivo o directorio" significa que debe cambiar su directorio de trabajo actual, mientras que "comando no encontrado" significa que debe usar apt-get install xxxyyy_zzz para solucionar el problema.
fuente