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ć whoamizamiast po prostu czytać dowolną z tych zmiennych.
USERi USERNAMEsą 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 whoamiisudo echo $USER
sudo echo $USERpowł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 whoamiużywania identyfikatora EUID , zwróć uwagę, że sudo whoamibyłby generowany, rootnawet gdyby whoamiużywał identyfikatora UID. sudoustawia 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 -uz sudo id -ru.
manstronę,whoamipodaje nazwę powiązaną z efektywnym identyfikatorem użytkownika. Co oznacza, że zwróci coś innego, jeśli używaszsudolub uruchamiasz plik wykonywalny setuid. Jeślisudoskonfigurowałeś, spróbujsudo whoamina przykład.