
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 bob
executar, sudo ./myscript.sh
gostaria myscript.sh
de saber bob
quem 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 whoami
to get bob
e not root
?
Responder1
Não tenho certeza de quão padrão é, mas pelo menos nos sistemas Ubuntu sudo
define as seguintes variáveis de ambiente (entre outras - consulte a ENVIRONMENT
seçã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 sudo
també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
.