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

StackOverflow https://stackoverflow.com/questions/1629605

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Проверьте переменную SUDO_USER .

http://www.gratisoft.us/sudo/man/sudo. HTML # среда

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

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

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

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

Это ни в коем случае не идеально, но вы можете использовать test -w ~ root & amp; & amp; эхо у меня есть доступ на запись в ~ root .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top