Erster $ USER innerhalb Shell-Skript, wenn sie mit sudo ausgeführt wird?
-
06-07-2019 - |
Frage
Wie kann ich die richtigen $ USER erhalten, wenn ich einen Shell-Skript mit sudo ausführen?
Ich betreibe sie als post Skripte in einem Mac installieren Paket, in dem sie sudo-ed werden automatisch zu sein, aber ich muss mit dem Benutzernamen Sachen tun.
$ HOME ist richtig, aber. Die unelegant Methode wäre, den Namen aus dem Home-Pfad zu extrahieren, aber ich frage mich, ob es eine natürliche Art und Weise, dies zu tun.
Ich kann nicht die Art und Weise beeinflussen, die Skripte genannt werden, da sie ein automatischer Anruf im Installer ist.
Lösung
Auf meinem System die Variable $SUDO_USER
auf den Benutzernamen gesetzt des Anrufers.
Sie sollten den Benutzernamen aus der ${HOME}
Variable nicht direkt extrahieren. Es ist so konfiguriert und nicht berechnet. Um die Benutzername extrahieren Sie einen Blick in /etc/passwd
Datei nehmen könnten, aber das ist sehr systemabhängig, z.B. manchmal müssen Sie ein LDAP-Verzeichnis suchen in oder die Einträge werden vermehrt durch NIS ...
Andere Tipps
Sie können mit $(logname)
, die Ihren Login-Namen zurückgibt, auch wenn Sie gerade sudoing.
Überprüfen Sie die Variable SUDO_USER .
http://www.gratisoft.us/sudo/man/sudo. html # Umgebung
Eine andere Möglichkeit, um den Benutzer zu erhalten, ist über die die Befehl. Dies ist manchmal nützlich, wenn Sie mich nicht, wenn der Benutzer sudo'd hat oder nicht.
who -m | awk '{print $1;}'
SUDO_USER
ist nicht tragbar. Es ist nicht gesetzt auf Fedora 17.
Die $USER
und $UID
Variablen sind nicht vorhersehbar, wenn entweder sudo aufgerufen wird. Einige Distributionen berichten über die sudoer, andere berichten über den Root-Benutzer.
Es ist nicht perfekt, aber man kann test -w ~root && echo I have write access to ~root
verwenden.