Ce que je veux, c'est trouver le nom de l'utilisateur qui exécute le script bash, lorsque ce script est exécuté par Sudo
. Le seul moyen, que je sache, consiste à analyser la sortie de who -m
(who am i
) de la manière suivante:
user@UbuntuServer:~$ cat who.sh
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'
user@UbuntuServer:~$ Sudo ./who.sh
root
root
user
Le problème est le suivant: Dans Ubuntu Desktop 16.04.4, who -m
(resp. who am i
) ne fait rien. Pourquoi?
Une autre question est de savoir pourquoi page de manuel en ligne de Ubuntu = _ pour who
est différent de man who
exécuté soit sur Ubuntu Desktop, soit sur Server?
Mais ces questions ne sont pas si importantes selon mes objectifs. Et comme il est mentionné dans le titre, la question principale est: Comment trouver quel utilisateur exécute le script quand est utilisé Sudo
?
Pratiquement, le titre original - Comment trouver "qui suis-je" sur Ubuntu Desktop? - est la même question, mais posée à tort.
J'ai eu un problème similaire il y a quelque temps, et le seul moyen qui a fonctionné de manière fiable pour moi jusqu'à présent est:
echo ${Sudo_USER:-${USER}}
Tant que l'utilisateur travaille avec le shell comme tel, $USER
contient son nom d'utilisateur. Lorsqu'il appelle Sudo
, le nouveau sous-shell $Sudo_USER
est défini sur ce qui est $USER
dans le shell appelant et $USER
devient root
, bien sûr.
Le truc avec l'opérateur :-
est que l'expression entière est évaluée à $Sudo_USER
si elle est définie (donc à l'intérieur du sous-shell ouvert par Sudo
), sinon à $USER
. Par conséquent, vous avez toujours le bon nom d'utilisateur et vous n'avez pas à vous soucier du contexte dans lequel l'expression est évaluée, ce que j'ai trouvé très pratique.
Au lieu de who am i
essayez whoami