在以 root 身份运行的脚本中使用 sudo 时获取用户主目录

在以 root 身份运行的脚本中使用 sudo 时获取用户主目录

在 sudo 的手册页中,我找到了该-H选项,但我似乎不明白它是如何工作的。手册页说:

-H(HOME)选项将HOME环境变量设置为目标用户(默认为root)的主目录,如passwd(5)中所指定。

据我理解,以下情况不应该发生:

root $ sudo -u sztomi -H echo $HOME
/root

但它应该输出/home/sztomi用户 sztomi 的主目录。

我怎样才能正确地做到这一点?

答案1

您没有引用$HOME,因此当前值正在被替换事先的执行须藤命令。用单引号将其括起来(')


编辑:

正如我们所注意到的(参见注释),sudo 不会调用子 shell 来启动给定的命令(因此没有 shell 扩展$HOME)。修改后的命令将是:

 sudo -u sztomi -H bash -c 'echo $HOME'

解释:sudo切换用户 ID,然后调用bashshell,shell 依次获取,用其值echo $HOME替换变量,最后执行命令。HOMEecho

HOME请注意,在此示例中,仅需要调用子 shell 才能在之后替换变量须藤切换用户 ID。如果您只想启动单个程序而不需要目标环境中的变量替换,则没有必要。

答案2

您应该能够使用 ~sztomi 来获取环境变量。

例如,这将列出 sztomi 主目录中的内容。

sudo -u sztomi ls ~sztomi

相关内容