De plus, ces variables correspondront-elles toujours au nom d'utilisateur actuellement connecté (elles le font sur mon système Debian) ? Puis-je supposer leur disponibilité dans d'autres systèmes (de type Unix) ?
Je suis également curieux de savoir pourquoi on utiliserait whoami
au lieu de simplement lire l'une de ces variables.
Réponse acceptée :
C'est la connexion .
La page de manuel Linux login(1) indique :
La valeur de $HOME , $USER , $SHELL , $PATH , $LOGNAME , et $MAIL sont définis en fonction des champs appropriés dans la saisie du mot de passe.
La page de manuel FreeBSD login(1) indique :
La connexion l'utilitaire entre des informations dans l'environnement (voir environ(7)) en spécifiant le répertoire personnel de l'utilisateur (HOME), l'interpréteur de commandes
(SHELL), le chemin de recherche (PATH), le type de terminal (TERM) et le nom d'utilisateur
(à la fois LOGNAME et USER).
Les pages de manuel NetBSD, OpenBSD et OS X disent la même chose.
Voici le code source de la connexion 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);
Voici le code source de la connexion FreeBSD :
(void)setenv("LOGNAME", username, 1);
(void)setenv("USER", username, 1);
(void)setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0);