0

在我的linux机器中,路径配置如下

非root用户:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java

根用户:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

当我试图

须藤回声 $PATH

它只显示非root用户路径而不是root路径

但是当我把

回声 $PATH

在脚本中并尝试使用 sudo 执行,它给出了根路径。有谁知道这个原因?实际上 sudo 是用于以 root 身份执行命令,但在我的第一种情况下它不能正常工作。

4

2 回答 2

2

sudo echo $PATHecho $PATH在当前非 root 环境中以 root 身份执行,即非 root 值为$PATH. 当您这样做时sudo bash somescript.sh,bash 以 root 身份执行,并且在其初始化期间,它会加载包含 root 的值的 root 环境$PATH

于 2013-04-10T15:17:56.903 回答
1

当你运行sudo echo $PATH时,shell$PATH在调用之前扩展sudo,所以你真的在运行这个:

sudo echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java

这给出了您所看到的结果 - 显示的非 root 用户PATH

echo $PATH嵌入到脚本中时sudo somescript.sh,运行脚本的 shell 以 root 身份运行,因此当它$PATH作为解释脚本的一部分展开时,它会看到 root 的环境并显示 PATH 的 root 版本。

为了避免第一种情况下的早期扩展,您可以这样做:

sudo bash -c 'echo $PATH'

假设您sudoers的设置允许这样做。单引号可防止非 root 用户 shell 在将变量作为命令传递给bash.

于 2013-04-10T16:45:31.477 回答