Linux /为什么su命令是从CMD工作,但不是从脚本?

我有下一个脚本:

cd /home touch $PF ; chown $NU.$NU $PF su -p -s /bin/sh root -c "node" 

当我运行它时,会引发下一个错误:

 sh: node: command not found 

但是,当我从Linux命令行运行它,它成功,并给我节点的命令行。

这可能是什么原因?

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. 

所以,当你在当前的 $PATH可能有node时,它可能不在root$PATH

正如一些评论者已经提到的,你可以尝试给node一个绝对的$PATHsu -p -s /bin/sh root -c "/path/to/node"

如果您可以从当前用户调用node ,请尝试使用which node来确定可执行文件的完整路径。

您也可以尝试回显您的$PATHsu -p -s /bin/sh root -c 'echo $PATH'