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 $HOME
erweitert 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 $HOME
an 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