Я хочу создать bash-скрипт, который должен выполняться с помощью sudo, но должен учитывать имя пользователя не-sudo, который его выполнил. Так что, если пользователь bob
запускает, sudo ./myscript.sh
я хотел бы myscript.sh
знать, кто bob
был его исполнителем.
Давайте посмотрим внутрь myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Как я могу узнать имя пользователя, который породил процесс? Точнее, что я должен использовать вместо того, whoami
чтобы получить bob
и нет root
?
bash
shell-script
sudo
users
Марсио
источник
источник
USER=$(whoami)
. Обратите внимание, чтоUSER
уже существует как внутренняя переменная оболочки. Кроме того, если это bash-скрипт, не запускайте его, используяsh
только подмножество POSIX-совместимых функций.#!/usr/bin/env bash
в мои скрипты bash.sh
или как-то еще.Ответы:
Я не уверен, насколько он стандартен, но, по крайней мере, в системах Ubuntu
sudo
устанавливаются следующие переменные среды (среди прочего - см.ENVIRONMENT
Раздел справочной страницы sudo):например,
источник
Если вы хотите, чтобы это работало без этого
sudo
, используйте${SUDO_USER:-$USER}
. Например:объяснение
${var:-val}
будет расширяться до$var
, если он не установлен или пуст, в этом случае он будет расширяться доval
.источник