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

17

Eu quero criar um script bash que deve ser executado com o sudo, mas deve levar em conta o nome do usuário não-sudo que o executou. Portanto, se o usuário bob executar sudo ./myscript.sh , eu gostaria que myscript.sh soubesse que bob foi quem o executou.

Vamos ver o interior de 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 whoami para obter bob e não root ?

    
por marcio 15.06.2014 / 03:08

2 respostas

28

Não tenho certeza de como é padrão, mas pelo menos nos sistemas Ubuntu sudo define as seguintes variáveis de ambiente (entre outras - veja a seção ENVIRONMENT da 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

por exemplo,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver
    
por 15.06.2014 / 03:16
8

Se você quiser que ele funcione sem sudo , use ${SUDO_USER:-$USER} . Por exemplo:

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

Explicação

${var:-val} será expandido para $var , a menos que esteja desfeito ou vazio. Nesse caso, ele será expandido para val .

    
por 15.06.2014 / 12:57