如何修复 bash 在错误的目录中查找程序的问题(在 Ubuntu 11.10 上设置 NPM 的问题)

如何修复 bash 在错误的目录中查找程序的问题(在 Ubuntu 11.10 上设置 NPM 的问题)

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(但您也可以通过上面的命令了解到这一点)。

相关内容