Ответы:
Из переменных среды ,
$LOGNAME
то же самое, $USER
что дает
Имя текущего пользователя, вошедшего в систему. Эта переменная устанавливается системой. Вы, вероятно, не должны изменять его значение вручную.
От man logname
logname - распечатать имя пользователя
По- разному используется в следующем примере:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
Здесь вы можете увидеть разницу после входа в систему как root в терминале,
$LOGNAME
дает имя текущего вошедшего в систему пользователя в терминале (то есть root
)logname
напечатайте имя пользователя, который вошел в сеанс (т.е. pandya
)В 16.04 логин утилиты не работает, очевидно, специально, потому что можно взломать возвращаемое значение, что может быть недостатком безопасности. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Я использовал логин в некоторых скриптах и нашел его полезным, потому что он всегда возвращал одно и то же значение (мое логин), независимо от того, вызывал ли я его из мой собственный уровень или от вызова sudo, тогда как переменные окружения $ USER и $ LOGNAME - нет. Я не беспокоился о том, что кто-то взломает мой компьютер и изменит значение, которое он возвращает. Увы .... я нашел обходной путь. Я создал файл в моем домашнем каталоге как таковой
echo $USER > ~/.logname
Когда я хочу получить доступ к своему логину (например, присваивая переменной Bash g_logname), я делаю так:
declare g_logname="$(<~/.logname)";
Это работает для меня, будь то я или на корневом уровне через sudo, который поддерживает назначение "~" в качестве моего домашнего каталога. Я могу создать файл .logname для домашнего каталога каждого пользователя в системе. Да, кто-то может взломать мой компьютер и изменить эти файлы, но я не очень беспокоюсь об этом. Я просто хочу, чтобы мои сценарии работали.