Kann ich innerhalb eines mit „sudo“ ausgeführten Skripts auf die ursprüngliche Variable $USER zugreifen?

Kann ich innerhalb eines mit „sudo“ ausgeführten Skripts auf die ursprüngliche Variable $USER zugreifen?

Eine komische Frage, ich weiß. Hier ist das Skript:

echo $USER

Hier ist der Befehl, den ich zum Ausführen verwende:

sudo ./myscript.sh

Momentan wird „root“ gedruckt, aber ich möchte jon, dass es meinen Benutzernamen ausgibt. Gibt es eine Möglichkeit, dies zu tun, indem man das Skript und nicht den Befehl ändert?

Antwort1

Verwenden Sie die SUDO_USERUmgebungsvariable anstelle von USER.

sudofügt den Namen des Benutzers, der es ausgeführt hat, in die SUDO_USERUmgebungsvariable ein:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Sie können in Ihrem Skript also einfach $USERFolgendes ersetzen:$SUDO_USER

echo $SUDO_USER

Weitere Informationen

Antwort2

Zusätzlich zu@Eliah Kagans Antwort oben, ich möchte darauf hinweisen, dass Sie auch problemlos eine Erweiterung haben können, die sowohl funktioniert, wenn sie in einem sudoKontext ausgeführt wird, als auch außerhalb:

echo "${SUDO_USER:-$USER}"

$SUDO_USERDies wird standardmäßig auf den Wert von erweitert , wenn die Variable jedoch nicht festgelegt oder leer ist, wird auf den Wert von zurückgegriffen $USER.

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

Weitere Informationen zur Standardparametererweiterung in Bash finden Sie beispielsweise unterhttps://wiki.bash-hackers.org/syntax/pe#use_a_default_value.

verwandte Informationen