
Я хочу создать скрипт bash, который должен быть выполнен с sudo, но должен учитывать имя пользователя без sudo, который его выполнил. Поэтому, если пользователь bob
запустится, sudo ./myscript.sh
я хотел бы myscript.sh
знать bob
, кто его выполнил.
Давайте заглянем внутрь myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Как узнать имя пользователя, который породил процесс? Точнее, что мне следует использовать вместо whoami
to 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
.