Diferença entre “comando não encontrado” e “nenhum tal arquivo ou diretório”?

33

Por exemplo:

$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found

Qual é a diferença? Em ambos os casos, node e foo são comandos inválidos, mas parece que o Unix simplesmente não consegue encontrar o binário node ? Ao desinstalar um programa, por ex. node , existe uma maneira de limpar isso para que eu obtenha

$ node
-bash: node: command not found

EDITAR:

Resultados do comando type :

$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
    
por gwg 13.06.2016 / 19:09

2 respostas

56

Isso porque bash lembrou do local do seu comando, armazene-o em um hash

Depois que você desinstalou node , a tabela de hash não está desmarcada, bash ainda acha que node está em /usr/local/bin/node , ignorando a consulta PATH e chamando /usr/local/bin/node diretamente, usando execve() . Já que node não está mais lá, execve() retorna ENOENT error, significa que não existe esse arquivo ou diretório, bash reportou esse erro para você.

Em bash , você pode remover uma entrada da tabela de hash:

hash -d node

ou remova toda a tabela de hash ( funciona em todos os shell POSIX ):

hash -r
    
por 13.06.2016 / 19:15
-6

Eu achei no Ubuntu Linux 16.04 que "Nenhum arquivo ou diretório" significa que você tem que mudar seu diretório de trabalho atual enquanto "comando não encontrado" significa que você tem que usar o apt-get install xxxyyy_zzz para corrigir o problema. >     

por 14.06.2016 / 05:08