
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 bob
ejecuta, sudo ./myscript.sh
me gustaría myscript.sh
saber bob
quié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 whoami
obtener bob
y no root
?
Respuesta1
No estoy seguro de qué tan estándar es, pero al menos en los sistemas Ubuntu sudo
establece las siguientes variables de entorno (entre otras, consulte la ENVIRONMENT
secció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 sudo
tambié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
.