Odpowiedzi:
$LOGNAMEjest taki sam jak $USERco daje
Nazwa aktualnie zalogowanego użytkownika. Ta zmienna jest ustawiana przez system. Prawdopodobnie nie powinieneś zmieniać jego wartości ręcznie.
Od man logname
logname - wydrukuj nazwę użytkownika
Zużyte inaczej wykorzystane przez następujący przykład:
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:~$
Tutaj możesz zobaczyć różnicę po zalogowaniu jako root w terminalu,
$LOGNAMEpodaje nazwę aktualnie zalogowanego użytkownika w terminalu (tj. root)lognamewydrukuj nazwę użytkownika, który zalogował się w sesji (tj. pandya)Nazwa dziennika narzędzia jest zepsuta w 16.04, najwyraźniej celowo, ponieważ możliwe jest zhakowanie zwracanej wartości, co może być wadą bezpieczeństwa. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Używałem nazwy loga w niektórych skryptach i uznałem ją za przydatną, ponieważ zawsze zwracała tę samą wartość (moją nazwę logowania) bez względu na to, czy wywoływałem ją z mój własny poziom lub wywołanie sudo, podczas gdy zmienne środowiskowe $ USER i $ LOGNAME nie. Nie martwiłem się, że ktoś włamie się na mój komputer i zmodyfikuje wartość, którą zwraca. Niestety .... Znalazłem obejście. Jako taki utworzyłem plik w moim katalogu domowym
echo $USER > ~/.logname
Kiedy chcę uzyskać dostęp do mojej nazwy dziennika (np. Przypisując zmienną Bash g_logname), robię to w ten sposób:
declare g_logname="$(<~/.logname)";
Działa to dla mnie, zarówno jako ja, jak i na poziomie administratora poprzez sudo, który zachowuje przypisanie „~” jako mojego katalogu domowego. Mogę utworzyć plik .logname dla katalogu domowego każdego użytkownika w systemie. Tak, ktoś może włamać się na mój komputer i zmienić te pliki, ale tak naprawdę nie martwię się o to. Chcę tylko, żeby moje skrypty działały.