Я заметил, что RHEL 8 и Fedora 30 не обновляют файл utmp должным образом.
В результате такие команды, как «кто я», «последний», «w» и т. Д., Выводят неверные результаты(кто я на самом деле ничего не печатает)
После небольшого поиска в Google, я нашел 'logname', который сработал в этом случае, но я прочитал, что gnome вообще отказывается от поддержки utmp, так что это вопрос временипока это тоже не перестает работать.
Я написал следующий скрипт, который находит имя пользователя для входа (даже если он использует sudo в тот момент, когда он запускает команду), но это слишком сложно, поэтому я ищуальтернативы.
LOGIN_UID=$(cat /proc/self/loginuid)
LOGIN_NAME=$(awk -v val=LOGIN_UID -F ":" '$3==val{print $1}' /etc/passwd)
Есть ли простая альтернатива, которая не основана на правильном обновлении / var / run / utmp?
Редактировать 1: Решения, которые не работают $ HOME, $ USER и id
возвращают неверные значения при использовании в сценарии, который был запущен с помощью команды sudo.who am i
и logname
зависят от utmp, который не всегда обновляется терминалом.
Рабочее решение: После небольшого поиска был найден более простой способ, чем упомянутый выше.Комментарий https://unix.stackexchange.com/users/5685/frederik-deweerdt к собственному ответу
Ссылка на ответ, содержащая комментарий: https://unix.stackexchange.com/a/74312
Ответ 1
stat -c "%U" $(tty)
Второй ответ найден на https://stackoverflow.com/a/51765389/10630167
Ответ 2
`pstree -lu -s $$ | grep --max-count=1 -o '([^)]*)' | head -n 1 | sed 's/[()]//g'`