
Ich möchte ein Bash-Skript erstellen, das mit sudo ausgeführt werden muss, aber den Namen des Nicht-Sudo-Benutzers berücksichtigen soll, der es ausgeführt hat. Wenn also ein Benutzer es bob
ausführt, sudo ./myscript.sh
möchte ich myscript.sh
wissen, bob
wer es ausgeführt hat.
Werfen wir einen Blick hinein myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Wie kann ich den Namen des Benutzers herausfinden, der den Prozess gestartet hat? Genauer gesagt, was sollte ich anstelle von whoami
to get bob
und not verwenden root
?
Antwort1
Ich bin nicht sicher, wie standardmäßig es ist, aber zumindest in Ubuntu-Systemen sudo
werden die folgenden Umgebungsvariablen festgelegt (unter anderem – siehe den ENVIRONMENT
Abschnitt der Sudo-Manpage):
SUDO_UID Set to the user ID of the user who invoked sudo
SUDO_USER Set to the login of the user who invoked sudo
Zum Beispiel,
steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver
Antwort2
sudo
Wenn es auch ohne funktionieren soll , verwenden Sie ${SUDO_USER:-$USER}
. Beispiel:
printf '%s\n' "${SUDO_USER:-$USER}"
${var:-val}
wird zu erweitert $var
, es sei denn, es ist nicht festgelegt oder leer. In diesem Fall wird es zu erweitert val
.