我在fedora上安装完node后,接着安装npm,使用了以下命令:
curl [http://npmjs.org/install.sh](http://npmjs.org/install.sh) | sudo sh
却出现以下错误:
npm cannot be installed without nodejs.
Install node first, and then try again.Maybe node is installed, but not in the PATH?
Note that running as sudo can change envs.
我当前正运行于一个普通用户下,输入node,正常运行。又用su -切换成root,运行node,也正常运行。但在普通用户下执行:
sudo node
却提示:sudo: node: command not found
这可是非常奇怪!
在群里提出这个问题后,有前辈提示说,让我把PATH打印出来。
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/freewind/bin
$ sudo echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/freewind/bin
这两个看起来是一样的,应该不会出问题的啊
再试试which
$ which node
/usr/local/bin/node
$ sudo which node
which : no node in (/sbin:/bin:/usr/sbin:/usr/bin)
可以看到,此时搜索的PATH变少了,找不到node了。怎么回事?
在万能的stackoverflow上,搜索到了一个同样的问题:http://stackoverflow.com/questions/257616/sudo-changes-path-why
里面说sudo可能因为安全上的原因,不会使用修改过的PATH。好在下面的回答中,给出了一个可行的方案:
alias sudo='sudo env PATH=$PATH'
按这种方式,我把命令改为:
curl http://npmjs.org/install.sh | sudo env PATH=$PATH sh
这样就完全没问题了。