Идентифицировать пользователя в скрипте Bash, который вызывается с помощью sudo - PullRequest
94 голосов
/ 19 августа 2010

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

#!/bin/bash
whoami

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

root

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

Ответы [ 6 ]

119 голосов
/ 04 января 2011

$ 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.

49 голосов
/ 19 августа 2010

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

#!/bin/bash
echo $SUDO_USER
whoami
12 голосов
/ 21 января 2013

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

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

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

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
2 голосов
/ 22 мая 2017

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

1 голос
/ 19 августа 2010

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

0 голосов
/ 20 августа 2010

try:
id -urn

...