web-dev-qa-db-fra.com

Comment trouver quel utilisateur exécute le script quand est utilisé sudo?

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?

enter image description here

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.

1
pa4080

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.

4
Wanderer

Au lieu de who am i essayez whoami

2
Denny John