Как мне узнать, какой пользователь выполняет скрипт, когда используется sudo?

Я хочу найти имя пользователя, который запускает скрипт 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) ничего не делать. Почему?

enter image description here

Другой вопрос заключается в том, почему онлайновая страница руководства Ubuntu для who отличается от man who ] выполняется на Ubuntu Desktop или на сервере?

Но эти вопросы не так важны в соответствии с моими целями. И, как упоминается в заголовке, главный вопрос: Как мне определить, какой пользователь выполняет сценарий, когда используется sudo?


Практически, оригинальный заголовок - Как мне найти «кто я» на Ubuntu Desktop? - это тот же, но неправильно заданный вопрос.

1
задан 9 May 2018 в 19:33

2 ответа

У меня была подобная проблема только что, и единственный путь, который работал надежно на меня до сих пор:

echo ${SUDO_USER:-${USER}}

Пока пользователь работает с оболочкой как сам, $USER содержит его имя пользователя. Когда он звонит sudo, для новой подоболочки $SUDO_USER установлен на то, что $USER в оболочке вызова, и $USER становится root, конечно.

Прием с оператором :- что целое выражение оценивает к $SUDO_USER если это установлено (так в подоболочке, открытой sudo), и иначе к $USER. Поэтому Вы всегда имеете корректное имя пользователя и не должны волноваться очень о контексте, в котором оценено выражение, который я нашел, чтобы быть удобным.

5
ответ дан 3 December 2019 в 06:37

Вместо who am i попробовать whoami

1
ответ дан 10 November 2019 в 08:10

Другие вопросы по тегам:

Похожие вопросы: