Получение $USER внутри оболочки script при работе с sudo?
Как получить правильный $USER, если я запустил оболочку script с sudo?
Я запускаю их как сценарии postinstall в установочном пакете Mac, где они автоматически редактируются, но мне нужно делать что-то с именем пользователя.
$HOME - это правильно. Неэлегантный метод заключается в извлечении имени из исходного пути, но мне интересно, есть ли естественный способ сделать это.
Я не могу влиять на способ вызова сценариев, поскольку это автоматический вызов внутри установщика.
Ответы
Ответ 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
.