Как получить имя пользователя, выполнившего bash-скрипт как sudo?

Как получить имя пользователя, выполнившего bash-скрипт как sudo?

Я хочу создать скрипт bash, который должен быть выполнен с sudo, но должен учитывать имя пользователя без sudo, который его выполнил. Поэтому, если пользователь bobзапустится, sudo ./myscript.shя хотел бы myscript.shзнать bob, кто его выполнил.

Давайте заглянем внутрь myscript.sh:

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

Как узнать имя пользователя, который породил процесс? Точнее, что мне следует использовать вместо whoamito get bobи not root?

решение1

Я не уверен, насколько это стандартно, но, по крайней мере, в системах Ubuntu sudoзадаются следующие переменные среды (среди прочих - см. ENVIRONMENTраздел man-страницы 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

например,

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

решение2

Если вы хотите, чтобы это работало sudoи без него, используйте ${SUDO_USER:-$USER}. Например:

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

${var:-val}будет расширяться до $var, если только он не не установлен или не пуст, в противном случае он будет расширяться до val.

Связанный контент