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

相關內容