¿Cómo obtener el nombre del usuario que ejecutó un script bash como sudo?

¿Cómo obtener el nombre del usuario que ejecutó un script bash como sudo?

Quiero crear un script bash que deba ejecutarse con sudo pero debo tener en cuenta el nombre del usuario que no es sudo y que lo ejecutó. Entonces, si el usuario bobejecuta, sudo ./myscript.shme gustaría myscript.shsaber bobquién lo ejecutó.

Miremos dentro myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.

¿Cómo puedo saber el nombre del usuario que generó el proceso? Más específicamente, ¿qué debo usar en lugar de whoamiobtener boby no root?

Respuesta1

No estoy seguro de qué tan estándar es, pero al menos en los sistemas Ubuntu sudoestablece las siguientes variables de entorno (entre otras, consulte la ENVIRONMENTsección de la página de manual de Sudo):

   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

Por ejemplo,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

Respuesta2

Si desea que funcione sudotambién sin él, utilice ${SUDO_USER:-$USER}. Por ejemplo:

printf '%s\n' "${SUDO_USER:-$USER}"

${var:-val}se expandirá a $var, a menos que no esté configurado o esté vacío, en cuyo caso se expandirá a val.

información relacionada