Получение $USER внутри скрипта оболочки при запуске с sudo?
-
06-07-2019 - |
Вопрос
Как мне получить правильный $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
.