Inoltre, queste variabili corrisponderanno sempre al nome utente attualmente connesso (lo fanno sul mio sistema Debian)? Posso presumere la loro disponibilità in altri sistemi Unix (simili)?
Sono anche curioso di sapere perché si dovrebbe usare whoami
invece di leggere solo una di queste variabili.
Risposta accettata:
È accesso .
La pagina man di Linux login(1) dice:
Il valore per $HOME , $UTENTE , $SHELL , PERCORSO$ , $LOGNAME e $MAIL sono impostati in base agli appositi campi nell'inserimento della password.
La pagina man di FreeBSD login(1) dice:
Il accesso l'utilità inserisce le informazioni nell'ambiente (vedi environ(7)) specificando la home directory dell'utente (HOME), il comando
interprete (SHELL), il percorso di ricerca (PATH), il tipo di terminale (TERM) e il nome utente
(sia LOGNAME che USER).
Le pagine man di NetBSD, OpenBSD e OS X dicono la stessa cosa.
Ecco il codice sorgente dal login util-linux:
setenv("HOME", pwd->pw_dir, 0); /* legal to override */
setenv("USER", pwd->pw_name, 1);
setenv("SHELL", pwd->pw_shell, 1);
/* ... */
setenv("LOGNAME", pwd->pw_name, 1);
Ecco il codice sorgente dal login di FreeBSD:
(void)setenv("LOGNAME", username, 1);
(void)setenv("USER", username, 1);
(void)setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0);