sudo奇怪的行为

时间:2013-04-10 15:11:42

标签: linux echo sudo

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

  

非root用户:   的/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /本地/ JAVA

     

root用户:   的/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中

当我试图

  

sudo echo $ PATH

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

但是当我把

  

echo $ PATH

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

2 个答案:

答案 0 :(得分:2)

sudo echo $PATH在当前的非root环境中以root身份执行echo $PATH,即非root值为$PATH。执行sudo bash somescript.sh时,bash以root身份执行,在初始化期间,它会加载包含root值$PATH的根环境。

答案 1 :(得分: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的根版本。

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

sudo bash -c 'echo $PATH'

假设您的sudoers已设置为允许该值。单引号可防止非root用户shell在将变量作为命令传递给bash之前展开变量。