$ 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
вызывается.
who am i
вот ответ.who am i
естьwho mom likes
. Твой выбор.who
возвращает мне две строки, обе содержат мое имя, и неwho am i
возвращает ни одной. Любая помощь?who am i
ничего не делает, вроде бы простоwho
, так чтоwho | awk '{print $1}'
работает как положено;)awk
установили, вы также можете использоватьcut
:who mom likes | cut -d' ' -f1
илиsed
по какой-то причине:who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
Я думаю, что $ SUDO_USER действителен.
источник
sudo env
показывает,SUDO_USER
ноsudo echo $SUDO_USER
ничего не печатает ...sudo echo $SUDO_USER
, bash оценивает $ SUDO_USER перед выполнением sudo. попробуйте сценарий, опубликованный в этом решении, он работает.echo ${SUDO_USER:-$USER}
чтобы поймать и то,sudo
и другое, а не sudo. Но ответlogname
$SUDO_USER
не работаетsudo su -
, ноlogname
всегда работает.Вот как получить имя пользователя человека, который вызвал скрипт, независимо от того, sudo или нет:
или более короткая версия
источник
user=${SUDO_USER:-$(whoami)}
илиuser=$(logname)
who am i | awk '{print $1}'
не работал на меня, ноwho|awk '{print $1}'
будет служить работеисточник
Странно, но система действительно различает реальные и эффективные UID , но я не могу найти программу, которая экспортирует их на уровне оболочки.
источник
Используя
whoami
,who am i
,who
,id
или$SUDO_USER
это не так.На самом деле,
who
это никогда не решение вопроса, так как он будет перечислять только зарегистрированных пользователей, которых могут быть десятки ...На мой взгляд, единственный ценный ответ - это использование
logname
.Надеюсь это поможет
Роб
источник
Если вы ищете именно тот UID (полезно для докеров), то это работает:
источник