Я хочу найти имя пользователя, который запускает скрипт bash, когда этот скрипт выполняется с помощью sudo
. Единственный возможный способ, который я знаю, - это проанализировать вывод who -m
(who am i
) следующим образом:
user@UbuntuServer:~$ cat who.sh
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'
user@UbuntuServer:~$ sudo ./who.sh
root
root
user
Проблема заключается в следующем: в Ubuntu Desktop 16.04.4 who -m
( соответственно who am i
) ничего не делать. Почему?
Другой вопрос заключается в том, почему онлайновая страница руководства Ubuntu для who
отличается от man who
] выполняется на Ubuntu Desktop или на сервере?
Но эти вопросы не так важны в соответствии с моими целями. И, как упоминается в заголовке, главный вопрос: Как мне определить, какой пользователь выполняет сценарий, когда используется sudo
?
Практически, оригинальный заголовок - Как мне найти «кто я» на Ubuntu Desktop? - это тот же, но неправильно заданный вопрос.
У меня была подобная проблема только что, и единственный путь, который работал надежно на меня до сих пор:
echo ${SUDO_USER:-${USER}}
Пока пользователь работает с оболочкой как сам, $USER
содержит его имя пользователя. Когда он звонит sudo
, для новой подоболочки $SUDO_USER
установлен на то, что $USER
в оболочке вызова, и $USER
становится root
, конечно.
Прием с оператором :-
что целое выражение оценивает к $SUDO_USER
если это установлено (так в подоболочке, открытой sudo
), и иначе к $USER
. Поэтому Вы всегда имеете корректное имя пользователя и не должны волноваться очень о контексте, в котором оценено выражение, который я нашел, чтобы быть удобным.