我有下一个脚本:
cd /home
touch $PF ; chown $NU.$NU $PF
su -p -s /bin/sh root -c "node"
当我运行它时,它会引发下一个错误:
sh: node: command not found
但是当我从linux命令行运行它时,它成功并给了我节点命令行。
可能是什么原因?
答案 0 :(得分:4)
node
可能不在root
用户的$PATH
中。
我查看了su
文档并注意到以下内容:
-m, -p, --preserve-environment
Preserve the current environment, except for:
$PATH
reset according to the /etc/login.defs options ENV_PATH or ENV_SUPATH (see below);
[...]
ENV_PATH (string)
If set, it will be used to define the PATH environment variable when a regular user login. The value can be
preceded by PATH=, or a colon separated list of paths (for example /bin:/usr/bin). The default value is
PATH=/bin:/usr/bin.
ENV_SUPATH (string)
If set, it will be used to define the PATH environment variable when the superuser login. The value can be
preceded by PATH=, or a colon separated list of paths (for example /sbin:/bin:/usr/sbin:/usr/bin). The default
value is PATH=/sbin:/bin:/usr/sbin:/usr/bin.
因此,虽然当前 node
中可能有$PATH
,但它可能不在root
$PATH
中。
正如一些评论者已经提到的那样,您可以尝试给$PATH
绝对node
:
su -p -s /bin/sh root -c "/path/to/node"
如果您可以从当前用户拨打node
,请尝试which node
以确定可执行文件的完整路径。
您也可以尝试回复$PATH
。
su -p -s /bin/sh root -c 'echo $PATH'