Подтвердить что ты не робот

Получение $USER внутри оболочки script при работе с sudo?

Как получить правильный $USER, если я запустил оболочку script с sudo?

Я запускаю их как сценарии postinstall в установочном пакете Mac, где они автоматически редактируются, но мне нужно делать что-то с именем пользователя.

$HOME - это правильно. Неэлегантный метод заключается в извлечении имени из исходного пути, но мне интересно, есть ли естественный способ сделать это.

Я не могу влиять на способ вызова сценариев, поскольку это автоматический вызов внутри установщика.

4b9b3361

Ответ 1

В моей системе переменная $SUDO_USER устанавливается на имя пользователя вызывающего абонента.

Вы не должны извлекать имя пользователя из переменной ${HOME} напрямую. Он настраивается и не вычисляется. Чтобы извлечь имя пользователя, вы можете заглянуть в файл /etc/passwd, но это очень зависит от системы, например. иногда вам приходится заглядывать в каталог LDAP, или записи распространяются через NIS...

Ответ 2

Осмотрите переменную SUDO_USER.

http://www.gratisoft.us/sudo/man/sudo.html#environment

Другой способ получить пользователя - с помощью команды who. Это полезно иногда, когда вам все равно, есть ли у пользователя sudo'd или нет.

who -m | awk '{print $1;}'

Ответ 3

Вы можете использовать $(logname), который возвращает ваше имя для входа, даже если вы в настоящее время используете sudoing.

Ответ 4

SUDO_USER не переносится. Он не установлен на Fedora 17.

Переменные $USER и $UID не предсказуемы при вызове sudo. Некоторые дистрибутивы сообщают о sudoer, другие сообщают пользователю root.

Это отнюдь не идеально, но вы можете использовать test -w ~root && echo I have write access to ~root.