2010-08-19 17 views
77

genannt identifizieren Wenn ich das Skript /root/bin/whoami.sh conatining erstellen:Benutzer in einem Bash-Skript von sudo

#!/bin/bash 
whoami 

Und das Skript von einem Benutzer mit einem korrekt konfigurierten sudo aufgerufen wird, wird es zeigen

root 

gibt es einen schnellen Weg, um die tatsächlichen Benutzer in einem Skript zu erhalten, oder muss ich auf diesem Benutzernamen Parameter zurückgreifen vorbei?

TIA, Bert

Antwort

44

Ich denke $SUDO_USER gültig ist.

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

Merkwürdig dienen: 'sudo env' zeigt' SUDO_USER' aber 'sudo echo $ SUDO_USER' druckt nichts ... – Job

+0

@Job beim Aufruf von Sudo? Weil es sonst keinen Sinn hat ... –

+15

job, das ist nicht komisch, es wird erwartet. In 'sudo echo $ SUDO_USER' bewertet bash $ SUDO_USER ** bevor ** sudo ausgeführt wird. versuchen Sie das Skript in dieser Lösung geschrieben, es funktioniert. –

0

Odd, führt das System zwischen real and effective UIDs unterscheiden, aber ich kann kein Programm, das diese auf Shell-Ebene exportiert.

-3

Versuch:
id -urn

+0

dies gibt Wurzel zurück, wenn es mit sudo ausgeführt wird, was das ganze Problem ist, das OP zu lösen versucht – Nathan

96

$ SUDO_USER funktioniert nicht, wenn Sie sudo su - verwenden.
Es erfordert auch mehrere Überprüfungen - wenn $USER == 'root' erhalten dann $SUDO_USER.

Anstelle des Befehls whoamiwho am i verwenden. Dadurch wird der für die aktuelle Sitzung gefilterte Befehl who ausgeführt. Es gibt Ihnen mehr Informationen als Sie benötigen. Also, tun dies nur um den Benutzer zu erhalten:

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

Alternativ (und einfacher) können Sie logname verwenden. Es macht dasselbe wie die obige Aussage.

Dies gibt Ihnen den Benutzernamen, der sich bei der Sitzung angemeldet hat.

Diese funktionieren unabhängig von sudo oder sudo su [whatever]. Es funktioniert auch unabhängig davon, wie oft su und sudo aufgerufen werden.

+2

Ja, +1, 'wer bin ich 'ist die Antwort hier. –

+28

Alternative zu "Wer bin ich" ist "Wer Mama mag". Deine Entscheidung. – wchargin

+2

'Wer' gibt 2 Zeilen für mich zurück, beide enthalten meinen Namen, und' Wer bin ich' gibt keine zurück. Irgendeine Hilfe? –

7

Hier ist, wie die Benutzername der Person zu bekommen, die das Skript aufgerufen, egal ob sudo oder nicht:

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi 

oder eine kürzere Version

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami` 
+5

noch kürzer: 'user = $ {SUDO_USER: - $ (whoami)}' oder ['user = $ (logname)'] (http://stackoverflow.com/a/4597929/321973) –

2

who am i | awk '{print $1}' nicht für mich arbeiten aber who|awk '{print $1}' wird die Arbeit

Verwandte Themen