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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top