我有个问题。
最近我已经安装了nodejs
(如果你不知道它是什么,它并不重要,可以是其他任何东西)从源到 /opt/node:
$ ls -la /opt
...
lrwxrwxrwx 1 root root 11 2012-07-25 13:48 node -> node-0.6.3/
drwxr-xr-x 6 root root 4096 2012-07-25 13:48 node-0.6.3
...
Run Code Online (Sandbox Code Playgroud)
所以,二进制文件在/opt/node/bin
:
$ ls -la /opt/node/bin
...
lrwxrwxrwx 1 root root 38 2012-06-20 11:44 npm -> ../lib/node_modules/npm/bin/npm-cli.js
...
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,npm
在那里。为了更容易从命令行使用它,我$PATH
在.bashrc
脚本中修复了它:
HOME=$HOME:...:/opt/node/bin
对 root 也是如此.bashrc
:
# which npm
/opt/node/bin/npm
Run Code Online (Sandbox Code Playgroud)
但是如果我用 sudo 运行 npm,npm
则找不到:
$ sudo which npm
$ sudo npm -g install uglify-js
sudo: npm: command not found
Run Code Online (Sandbox Code Playgroud)
那么,为什么会这样呢?我如何获得我想要的?
谢谢。
更新:按照保罗的建议,我添加了
Defaults env_keep = PATH
Run Code Online (Sandbox Code Playgroud)
到 /etc/sudoers
但问题仍然存在:
$ echo $PATH
... :/opt/node/bin
$ sudo su -
#
# sudo -V
...
Environment variables to preserve:
XAUTHORIZATION
XAUTHORITY
TZ
PS2
PS1
PATH
...
Run Code Online (Sandbox Code Playgroud)
所以,Defaults
指令做了它的工作,但我得到了同样的sudo: npm: command not found
sudo
调用一个新的 shell,传递给新 shell 的环境变量由“/etc/sudoers”文件管理。如果您希望通过您的路径,那么您需要添加
Defaults env_keep = "PATH"
Run Code Online (Sandbox Code Playgroud)
到“/etc/sudoers”,它将在 sudo shell 中保留 PATH 环境变量
如果这不起作用,则路径可能被secure_path
指令覆盖(有时,secure_path 被编译为二进制文件)。如果是这样,请尝试添加此命令,将组名替换为您所属的组:
exempt_group = "groupname"
Run Code Online (Sandbox Code Playgroud)
或者用您自己的路径覆盖 secure_path,例如:
secure_path = "/bin:/usr/bin:/sbin:/usr/sbin:/opt/node/bin"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6721 次 |
最近记录: |