curl http://npmjs.org/install.sh | sudo sh
这次我从 dir运行“信任”安装脚本/
。
$ 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
似乎某个地方的某个脚本正在污染我的$PATH
.我想知道的是,如果bash
在它查找的第一个目录中找不到该程序,它不是会继续查找$PATH
吗?应该可以在里面找到/usr/local/bin
!
npm
真的,真的似乎不想只是工作。我想我会去加载一个稍微旧一点的 Ubuntu 并再试一次......
答案1
有可能你确实有一个/usr/local/bin/npm
,并且你的 shell 记住了它的缓存。你可以清除缓存使用hash -d npm
。缓存不在 shell 实例内共享,因此问题不会持续。
的输出which
与您的 shell 所做的不一致的原因是它which
是一个外部程序,因此它不共享 bash 的缓存。而是使用它type
,它是内置的 shell,因此更可靠。
答案2
你可以认为自己很幸运,因为你刚刚学会了最简单的方法,您不应该将额外的二进制目录放在变量前面PATH
。在你的情况下,一个理智的PATH
变量应该看起来像
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
但实际上导致您错误的问题并不是真正的问题PATH
,而是问题什么npm
命令可能被别名为。要了解这一点,请输入
type npm
另一种选择可能是这/usr/local/bin/npm
只是一个损坏的符号链接/home/steven/local/bin/npm
(但您也可以通过上面的命令了解到这一点)。