Идентифицировать пользователя в скрипте Bash, который вызывается с помощью sudo

Если я создаю скрипт /root/bin/whoami.sh содержащий:

#!/bin/bash
whoami

и этот скрипт вызывается пользователем с правильно настроенным sudo, он будет указывать

root

Есть ли быстрый способ получить фактического пользователя в скрипте, или мне придется прибегнуть к параметрам, передающим это имя пользователя?

Ответ 1

$SUDO_USER не работает, если вы используете sudo su -.
Он также требует нескольких проверок - если $USER == 'root', то получите $SUDO_USER.

Вместо команды whoami используйте who am i. Это запускает команду who, отфильтрованную для текущего сеанса. Это дает вам больше информации, чем вам нужно. Итак, сделайте это, чтобы получить только пользователя:

who am i | awk '{print $1}'

Альтернативно (и проще) вы можете использовать logname. Он делает то же самое, что и вышеупомянутое утверждение.

Это дает вам имя пользователя, которое вошло в сеанс.

Они работают независимо от sudo или sudo su [whatever]. Он также работает независимо от того, сколько раз вызывается su и sudo.

Ответ 2

Я думаю, что $SUDO_USER действителен.

#!/bin/bash
echo $SUDO_USER
whoami

Ответ 3

Вот как получить имя пользователя, который вызвал script, независимо от того, sudo или нет:

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

или более короткая версия

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`

Ответ 4

who am i | awk '{print $1}' не работал у меня, но who|awk '{print $1}' будет выполнять задание

Ответ 5

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

Ответ 6

попробовать:
id -urn