bash - su und $HOME

bash - su und $HOME

Angenommen, wir haben zwei Benutzer: Benutzer1 (ein Administrator) und Benutzer2 (ein Standardbenutzer).

  • Anmelden als Benutzer1
  • Laufen

    sudo su - user2 -c "env"
    
  • Das Ergebnis zeigt $HOME=/home/user2

  • Laufen

    sudo su - user2 -c "echo $HOME" 
    
  • Das Ergebnis zeigt $HOME=/home/user1

Warum das?

Antwort1

Dies liegt daran, dass im zweiten Beispiel die Variable $HOMEerweitert wird, bevor die Shell den Befehl ausführt. Sie führen also tatsächlich Folgendes aus:

sudo su - user2 -c "echo /home/user1" 

da dies der Wert ist, den die Variable $HOMEan diesem Punkt hat.

(Ich vermute auch, dass die Ausgabe des zweiten Befehls nicht wirklich ist $HOME=/home/user1, sondern stattdessen nur /home/user1).

Sie können die Variablenerweiterung in der ersten Shell verhindern, indem Sie einfache Anführungszeichen verwenden:

$ sudo su - user2 -c 'echo $HOME' 
/home/user2

verwandte Informationen