假设我们有两个用户:user1(管理员)和user2(标准用户)
- 以 user1 身份登录
跑步
sudo su - user2 -c "env"
结果显示$HOME=/home/user2
跑步
sudo su - user2 -c "echo $HOME"
结果显示$HOME=/home/user1
这是为什么?
答案1
这是因为在第二个示例中,变量$HOME
在 shell 执行命令之前被扩展,所以您真正运行的是
sudo su - user2 -c "echo /home/user1"
因为这就是变量$HOME
此时的值。
(我还猜测第二个命令的输出不是真正的 $HOME=/home/user1
,而是只是/home/user1
)。
如果使用单引号,则可以防止第一个 shell 中的变量扩展:
$ sudo su - user2 -c 'echo $HOME'
/home/user2