Wie erhalte ich den Namen des Benutzers, der ein Bash-Skript als sudo ausgeführt hat?

Wie erhalte ich den Namen des Benutzers, der ein Bash-Skript als sudo ausgeführt hat?

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 bobausführt, sudo ./myscript.shmöchte ich myscript.shwissen, bobwer 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 whoamito get bobund not verwenden root?

Antwort1

Ich bin nicht sicher, wie standardmäßig es ist, aber zumindest in Ubuntu-Systemen sudowerden die folgenden Umgebungsvariablen festgelegt (unter anderem – siehe den ENVIRONMENTAbschnitt 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

sudoWenn 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.

verwandte Informationen