Inoltre, queste variabili corrisponderanno sempre al nome utente attualmente connesso (lo fanno sul mio sistema Debian)? Posso assumere la loro disponibilità in altri sistemi Unix (simili)?
Sono anche curioso di sapere perché si dovrebbe usare whoamiinvece di leggere una qualsiasi di queste variabili.
USERe USERNAMEsono normali variabili di ambiente, il che significa che, se lo si desidera, è possibile impostarle su valori arbitrari. Basta digitare USER=xyz. In altre parole, anche se tali variabili esistono, non vi è alcuna garanzia che i loro valori corrispondano al nome utente attualmente connesso.
guarantee, intendevo per impostazione predefinita (ovvero supponendo che l'utente non li abbia modificati).
sudo whoamiesudo echo $USER
sudo echo $USER, la shell si espande $USER, quindi chiama sudo. Quindi ovviamente non produce lo stesso output di whoami. Come sudo whoami, sudo sh -c 'echo $USER'fa (tipicamente) output root. Per quanto riguarda il tuo commento whoamisull'utilizzo dell'EUID , nota che sudo whoamiverrebbe prodotto rootanche se whoamiutilizzato l'UID. sudoimposta sia EUID che UID per il comando che esegue (tranne nella situazione molto insolita in cui lo si configura esplicitamente per comportarsi diversamente). Confronta sudo id -ucon sudo id -ru.
manpagina,whoamiriporta il nome associato al tuo ID utente effettivo. Ciò significa che restituirà qualcosa di diverso se si utilizzasudoo si esegue un eseguibile setuid. Se haisudoimpostato, provasudo whoamiad esempio.