Como consertar o bash procurando por um programa no diretório errado (Problemas ao configurar o NPM no Ubuntu 11.10)

5

Desta vez eu executei o script de instalação "confiante" curl http://npmjs.org/install.sh | sudo sh da pasta / .

$ which npm
/usr/local/bin/npm
$ npm
bash: /home/steven/local/bin/npm: No such file or directory
$ echo $PATH
/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
$ ls /home/steven/local/bin
node  node-waf
$ ls /usr/local/bin
node  node-waf  npm  npm_g  npm-g

Parece que algum script em algum lugar está poluindo meu $PATH . O que eu imagino é que, se bash não conseguir encontrar o programa no primeiro diretório em que ele olha, ele não continuará procurando $PATH ? Deve ser capaz de encontrá-lo em /usr/local/bin !

npm realmente não parece querer apenas funcionar. Acho que vou carregar um Ubuntu um pouco mais antigo e dar um outro passo ...

    
por Steven Lu 18.11.2011 / 08:24

2 respostas

7

Provavelmente você tem um /usr/local/bin/npm e seu shell se lembra dele em seu cache. Você pode limpar o cache com %código%. O cache não é compartilhado dentro de instâncias do shell, então o problema não durará.

O motivo pelo qual a saída de hash -d npm é inconsistente com o que seu shell faz é que which é um programa externo, portanto, ele não compartilha o cache do bash. Use which , é um shell integrado, por isso é mais confiável.

    
por 19.11.2011 / 01:54
2

Você pode se considerar bastante sortudo, porque você acabou de aprender o caminho mais fácil , que você não deve colocar seus diretórios binários adicionais na frente da variável PATH . Uma variável sane PATH no seu caso deve ser parecida com

PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin

Mas o problema que realmente causou o erro não é realmente com PATH , mas sim com o comando qual npm provavelmente foi aliado para . Para aprender isso, digite

type npm

Outra opção pode ser que /usr/local/bin/npm seja apenas um link simbólico quebrado para /home/steven/local/bin/npm (mas você também aprenderia isso com o comando acima).

    
por 18.11.2011 / 09:02

Tags