在 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,然后调用bash
shell,shell 依次获取,用其值echo $HOME
替换变量,最后执行命令。HOME
echo
HOME
请注意,在此示例中,仅需要调用子 shell 才能在之后替换变量须藤切换用户 ID。如果您只想启动单个程序而不需要目标环境中的变量替换,则没有必要。
答案2
您应该能够使用 ~sztomi 来获取环境变量。
例如,这将列出 sztomi 主目录中的内容。
sudo -u sztomi ls ~sztomi