Відповіді:
$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 файл для домашнього каталогу кожного користувача в системі. Так, хтось міг би зламати мій комп'ютер і змінити ці файли, але я не дуже переживаю з цього приводу. Я просто хочу, щоб мої сценарії працювали.