Si je crée le script /root/bin/whoami.sh
contenant:
#!/bin/bash
whoami
et ce script est appelé par un utilisateur avec un Sudo correctement configuré, il indiquera
root
Existe-t-il un moyen rapide d'obtenir l'utilisateur réel dans un script, ou devrai-je recourir à des paramètres en passant ce nom d'utilisateur?
$ Sudo_USER ne fonctionne pas si vous utilisez Sudo su -
.
Il nécessite également plusieurs vérifications - si $USER == 'root'
puis obtenez $Sudo_USER
.
Au lieu de la commande whoami
utilisez who am i
. Cela exécute la commande who
filtrée pour la session en cours. Il vous donne plus d'informations que nécessaire. Donc, faites cela pour obtenir uniquement l'utilisateur:
who am i | awk '{print $1}'
Alternativement (et plus simplement), vous pouvez utiliser logname
. Cela fait la même chose que la déclaration ci-dessus.
Cela vous donne le nom d'utilisateur qui s'est connecté à la session.
Ceux-ci fonctionnent indépendamment de Sudo
ou Sudo su [whatever]
. Il fonctionne également quel que soit le nombre d'appels de su
et Sudo
.
Je pense que $ Sudo_USER est valide.
#!/bin/bash
echo $Sudo_USER
whoami
Voici comment obtenir le nom d'utilisateur de la personne qui a appelé le script, peu importe si Sudo ou non:
if [ $Sudo_USER ]; then user=$Sudo_USER; else user=`whoami`; fi
ou une version plus courte
[ $Sudo_USER ] && user=$Sudo_USER || user=`whoami`
who am i | awk '{print $1}'
n'a pas fonctionné pour moi mais who|awk '{print $1}'
servira le travail
Bizarrement, le système fait la distinction entre ID réels et effectifs , mais je ne trouve aucun programme qui exporte cela au niveau du shell.
Utilisation de whoami
, who am i
, who
, id
ou $Sudo_USER
n'est pas ici.
En fait, who
n'est jamais une solution à la question, car il ne listera que les utilisateurs connectés, ce qui pourrait être des dizaines ...
À mes yeux, la seule réponse valable est l'utilisation de logname
.
J'espère que cela t'aides
Rob