Czy te zmienne zawsze będą pasować do aktualnie zalogowanej nazwy użytkownika (robią to w moim systemie Debian)? Czy mogę założyć ich dostępność w innych systemach uniksowych?
Jestem również ciekawy, dlaczego można by użyć whoami
zamiast po prostu czytać dowolną z tych zmiennych.
USER
i USERNAME
są zwykłymi zmiennymi środowiskowymi, co oznacza, że jeśli chcesz, możesz ustawić je na dowolne wartości. Po prostu wpisz USER=xyz
. Innymi słowy, nawet jeśli te zmienne istnieją, nie ma gwarancji, że ich wartości odpowiadają aktualnie zalogowanej nazwie użytkownika.
guarantee
, miałem na myśli domyślnie (tzn. Zakładając, że użytkownik ich nie zmienił).
sudo whoami
isudo echo $USER
sudo echo $USER
powłoka rozszerza się $USER
, a następnie wywołuje sudo
. Więc oczywiście nie daje tego samego wyniku, co whoami
. Podobnie sudo whoami
, sudo sh -c 'echo $USER'
robi (zwykle) wyjście root
. Jeśli chodzi o komentarz na temat whoami
używania identyfikatora EUID , zwróć uwagę, że sudo whoami
byłby generowany, root
nawet gdyby whoami
używał identyfikatora UID. sudo
ustawia zarówno identyfikator EUID, jak i identyfikator UID dla uruchomionego polecenia (z wyjątkiem bardzo nietypowej sytuacji, w której jawnie skonfigurowano go, aby zachowywał się inaczej). Porównaj sudo id -u
z sudo id -ru
.
man
stronę,whoami
podaje nazwę powiązaną z efektywnym identyfikatorem użytkownika. Co oznacza, że zwróci coś innego, jeśli używaszsudo
lub uruchamiasz plik wykonywalny setuid. Jeślisudo
skonfigurowałeś, spróbujsudo whoami
na przykład.