Linux /为什么su命令是从CMD运行而不是从脚本运行?

时间:2014-07-06 08:21:32

标签: linux

我有下一个脚本:

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

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

sh: node: command not found

但是当我从linux命令行运行它时,它成功并给了我节点命令行。

可能是什么原因?

1 个答案:

答案 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'