Par exemple:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Quelle est la différence? Dans les deux cas, node
et foo
sont des commandes invalides, mais il semble qu'Unix ne trouve pas le node
binaire? Lors de la désinstallation d'un programme, par exemple node
, y a-t-il un moyen de le nettoyer pour que je puisse obtenir
$ node
-bash: node: command not found
MODIFIER:
Résultats de type
commande:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
ettype foo
(bien que seul le premier soit vraiment utile).Réponses:
C'est parce que
bash
souvenez - vous de votre emplacement de commande, stockez-le dans une table de hachage .Une fois que vous avez désinstallé
node
, la table de hachage n'est pas effacée,bash
pense toujours qu'ilnode
est en cours/usr/local/bin/node
, ignore laPATH
recherche et appelle/usr/local/bin/node
directement à l'aide deexecve()
. Depuis quandnode
n'existe plus, erreurexecve()
renvoieENOENT
, signifie qu'aucun fichier ou répertoire debash
ce type ne vous a été signalé.Dans
bash
, vous pouvez supprimer une entrée de la table de hachage:ou supprimez la table de hachage entière ( fonctionne dans tout shell POSIX ):
la source
/usr/local/bin/node
que ce soit ce qui manque. si ce fichier est un fichier exécutable lié dynamiquement et qu’une des dépendances est manquante, vous recevrez le même message "Aucun fichier ou répertoire de ce type". Cela peut vous rendre fou jusqu'à ce que vous essayiezldd
ce fichier.progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(ou cela pourrait ne pas être bash dans ce cas particulier, maisld-linux.so
).execve
écrire dans stderr en tant qu'effet secondaire en cas d'échec violerait probablement POSIX ou quelque chose comme ça)/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.J'ai trouvé sur Ubuntu Linux 16.04 que "Aucun fichier ou répertoire de ce type" signifie que vous devez changer votre répertoire de travail actuel, tandis que "commande non trouvée" signifie que vous devez utiliser apt-get install xxxyyy_zzz pour résoudre le problème.
la source