Odpowiedzi:
$LOGNAME
jest taki sam jak $USER
co 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,
$LOGNAME
podaje nazwę aktualnie zalogowanego użytkownika w terminalu (tj. root
)logname
wydrukuj 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.