Идентифицировать пользователя в скрипте 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