我有下一个脚本:
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
一个绝对的$PATH
: su -p -s /bin/sh root -c "/path/to/node"
如果您可以从当前用户调用node
,请尝试使用which node
来确定可执行文件的完整路径。
您也可以尝试回显您的$PATH
。 su -p -s /bin/sh root -c 'echo $PATH'