Como obter o nome do usuário que executou um script bash como sudo?

Como obter o nome do usuário que executou um script bash como sudo?

Quero criar um script bash que deve ser executado com sudo, mas deve levar em consideração o nome do usuário não sudo que o executou. Então, se o usuário bobexecutar, sudo ./myscript.shgostaria myscript.shde saber bobquem o executou.

Vejamos por dentro myscript.sh:

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

Como posso saber o nome do usuário que gerou o processo? Mais especificamente, o que devo usar em vez de whoamito get bobe not root?

Responder1

Não tenho certeza de quão padrão é, mas pelo menos nos sistemas Ubuntu sudodefine as seguintes variáveis ​​de ambiente (entre outras - consulte a ENVIRONMENTseção da página de manual do 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 exemplo,

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

Responder2

Se você quiser que funcione sem isso sudotambém, use ${SUDO_USER:-$USER}. Por exemplo:

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

${var:-val}será expandido para $var, a menos que não esteja definido ou vazio; nesse caso, será expandido para val.

informação relacionada