bash – ¿Diferencia entre "comando no encontrado" y "no existe tal archivo o directorio"?

Pregunta:

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 inválidos, pero parece que Unix simplemente no puede encontrar el binario del node . Al desinstalar un programa, por ejemplo, un node , ¿hay alguna manera de limpiar esto para que obtenga

$ node
-bash: node: command not found

EDITAR:

Resultados del comando de type :

$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found

Respuesta:

Eso es porque bash recordó la ubicación de su comando, guárdelo en una tabla hash .

Después de desinstalar el node , la tabla hash no se borra, bash todavía piensa que el node está en /usr/local/bin/node , omitiendo la búsqueda de PATH y llamando a /usr/local/bin/node directamente, usando execve() . Dado que cuando el node ya no está allí, execve() devuelve ENOENT error, significa que no existe tal archivo o directorio, bash informó ese error.

En bash , puede eliminar una entrada de la tabla hash:

hash -d node

o eliminar toda la tabla hash ( funciona en todos los shell POSIX ):

hash -r

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım