bash - su 和 $HOME

bash - su 和 $HOME

假设我们有两个用户: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

相关内容