Por exemplo:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
Qual é a diferença? Nos dois casos, node
e foo
são comandos inválidos, mas parece que o Unix simplesmente não consegue encontrar o node
binário? Ao desinstalar um programa, por exemplo node
, existe uma maneira de limpar isso para que eu obtenha
$ node
-bash: node: command not found
EDITAR:
Resultados do type
comando:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
type node
etype foo
(embora provavelmente apenas o primeiro seja realmente útil).Respostas:
Isso porque se
bash
lembrou do seu local de comando, armazene-o em uma tabela de hash .Após a desinstalação
node
, a tabela de hash não é limpa,bash
ainda pensa quenode
está/usr/local/bin/node
, pulando aPATH
pesquisa e chamando/usr/local/bin/node
diretamente, usandoexecve()
. Como quandonode
não existe mais,execve()
retornaENOENT
erro, significa que esse arquivo ou diretório nãobash
relatou esse erro para você.Em
bash
, você pode remover uma entrada da tabela de hash:ou remova a tabela de hash inteira ( funciona em todos os shell POSIX ):
fonte
/usr/local/bin/node
faltando; se esse arquivo for um executável vinculado dinamicamente e uma das dependências estiver ausente, você receberá a mesma mensagem "Não existe esse arquivo ou diretório". Isso pode deixá-lo louco até você experimentarldd
esse arquivo.progname: error while loading shared libraries: badLib.so.1: cannot open shared object file: No such file or directory
(ou pode não ser o bash nesse caso específico, masld-linux.so
).execve
gravar no stderr como efeito colateral na falha provavelmente violar POSIX ou algo)/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
.Eu descobri no Ubuntu Linux 16.04 que "Nenhum arquivo ou diretório" significa que você precisa mudar o diretório de trabalho atual, enquanto "comando não encontrado" significa que você deve usar o apt-get install xxxyyy_zzz para corrigir o problema.
fonte