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 whoami
invece di leggere una qualsiasi di queste variabili.
USER
e USERNAME
sono 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 whoami
esudo 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 whoami
sull'utilizzo dell'EUID , nota che sudo whoami
verrebbe prodotto root
anche se whoami
utilizzato l'UID. sudo
imposta 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 -u
con sudo id -ru
.
man
pagina,whoami
riporta il nome associato al tuo ID utente effettivo. Ciò significa che restituirà qualcosa di diverso se si utilizzasudo
o si esegue un eseguibile setuid. Se haisudo
impostato, provasudo whoami
ad esempio.