在我的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身份执行命令,但在我的第一种情况下,它不能正常工作。
答案 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
之前展开变量。