Получить $ USER внутри сценария оболочки при запуске с sudo? - PullRequest
31 голосов
/ 27 октября 2009

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

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

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

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

Ответы [ 4 ]

34 голосов
/ 27 октября 2009

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

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

20 голосов
/ 12 февраля 2015

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

17 голосов
/ 27 октября 2009

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

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

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

who -m | awk '{print $1;}'
9 голосов
/ 02 ноября 2012

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

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

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

...