2010-08-19 3 views
77

Si je crée le script /root/bin/whoami.sh conatining:identifier l'utilisateur dans un script bash appelé par sudo

#!/bin/bash 
whoami 

Ce script est appelé par un utilisateur avec un sudo correctement configuré, il indiquer

root 

Yat-il un moyen rapide pour obtenir l'utilisateur réel dans un script, ou vais-je avoir recours à des paramètres passant le long de ce nom d'utilisateur?

TIA, Bert

Répondre

44

Je pense que $SUDO_USER est valide.

#!/bin/bash 
echo $SUDO_USER 
whoami 
+1

Chose étrange: 'sudo env' montre' SUDO_USER' mais 'sudo echo $ SUDO_USER' n'imprime rien ... – Job

+0

@Job lors de l'appel à sudo? Parce que cela n'a aucun sens autrement ... –

+15

travail, ce n'est pas étrange, c'est prévu. dans 'sudo echo $ SUDO_USER', bash évalue $ SUDO_USER ** avant ** d'exécuter sudo. essayez le script posté dans cette solution, cela fonctionne. –

0

Odd, le système ne fait aucune distinction entre real and effective UIDs, mais je ne peux trouver aucun programme qui exporte ce au niveau de la coque.

-3

essayer:
id -urN

+0

cela retourne la racine lorsqu'il est exécuté avec sudo, qui est l'ensemble du problème OP tente de résoudre – Nathan

96

$ SUDO_USER ne fonctionne pas si vous utilisez sudo su -.
Il nécessite également plusieurs vérifications - si $USER == 'root' puis obtenir $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. Cela vous donne plus d'informations que vous n'en avez besoin. Alors, faites ceci pour simplement l'utilisateur:

who am i | awk '{print $1}' 

Sinon (et plus simple), vous pouvez utiliser logname. Il fait la même chose que la déclaration ci-dessus.

Ceci vous donne le nom d'utilisateur qui s'est connecté à la session.

Ceux-ci fonctionnent indépendamment de sudo ou sudo su [whatever]. Cela fonctionne également quel que soit le nombre de fois que su et sudo sont appelés.

+2

Oui, +1, 'qui suis-je 'est la réponse ici. –

+28

Alternative à «qui suis-je» est «qui maman aime». Votre choix. – wchargin

+2

'who' renvoie 2 lignes pour moi, les deux contenant mon nom, et' who am i' n'en renvoie aucune. De l'aide? –

7

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` 
+5

encore plus court: 'user = $ {SUDO_USER: - $ (whoami)}' ou ['user = $ (nom de connexion)'] (http://stackoverflow.com/a/4597929/321973) –

2

who am i | awk '{print $1}' ne fonctionnait pas pour moi mais servira le travail

Questions connexes