Ich schreibe ein Programm in Bash, das den Benutzernamen des Benutzers erhalten muss.
Ich habe von einem Ding namens gehört whoami
, aber ich habe keine Ahnung, was es tut oder wie man es benutzt.
Mit welchem Befehl kann ich den aktuellen Benutzernamen abrufen?
man whoami
normalerweise ein guter erster Stopp, um nach Dokumentation zu suchen.Antworten:
Geben Sie in der Befehlszeile ein
oder
Führen Sie die folgenden Schritte aus, um diese Werte in einer Variablen zu speichern
oder
Natürlich müssen Sie keine Variable erstellen, da dies der Zweck der
$USER
Variablen ist.quelle
$USER
ist überhaupt nicht eingestellt. Schlimmer noch, es ist nur eine Umgebungsvariable, so dass es vom Benutzer überschrieben werden kann:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
das Problem durch die Verwendung (wie von Ihnen vorgeschlagen) vollständig beseitigt, vorausgesetzt, überschriebene Umgebungsvariablen sind ein potenzielles Problem in Ihrem Kontext.Eine Alternative zu
whoami
istid -u -n
.id -u
gibt die Benutzer-ID zurück (zB 0 für root ).quelle
id
Befehl-u
und die-n
Flags Teil von posix sind"${USER}"
undwhoami
beide hängen davon ab, wie Sie sich anmelden. Insbesondere setzen Login-Shells und sudo $ USER und sehenwhoami
den an stdin angehängten Benutzer an. Wenn Sie jedoch einen Stapeljob von cron ausführen oder ein Startskript als anderer Benutzer als root ausführen, geben diese entweder den falschen Benutzer (root) oder gar nichts aus. Diese Antwort gibt den korrekten Wert zurück, unabhängig von der Benutzer-ID des Prozesses.-n
Argument den Benutzernamen genau wie die ursprünglich gestellte Frage ausgibt. siehe folgendes:id -u -n
druckebrett
- auch auf darwin.Verwenden Sie den Standardbefehl Unix / Linux / BSD / MacOS
logname
, um den angemeldeten Benutzer abzurufen. Dies ignoriert sowohl die Umwelt als auch Sudo, da es sich um unzuverlässige Reporter handelt. Es wird immer der Name des angemeldeten Benutzers gedruckt und dann beendet. Dieser Befehl gibt es seit etwa 1981.quelle
Ein Hack, den ich unter Solaris 9 und Linux verwendet habe und der für beide gut funktioniert:
Dieses Snippet druckt den Namen des Benutzers mit der aktuellen EUID.
HINWEIS: benötigen Sie Bash als Dolmetscher.
Unter Solaris haben Sie Probleme mit den oben beschriebenen Methoden:
id
akzeptiert die Parameter-u
und nicht-n
(daher müssen Sie die Ausgabe analysieren)whoami
existiert nicht (standardmäßig)who am I
druckt den Besitzer des aktuellen Terminals (ignoriert EUID)$USER
Variable wird erst nach dem Lesen von Profildateien richtig gesetzt (zum Beispiel/etc/profile
)quelle
ps
Befehl alles, was erforderlich ist, um den Eigentümer der PID der aktuellen Shell anzuzeigen.command -p id
(aus einer POSIX-Shell) oder/usr/xpg4/bin/id
. Im Allgemeinen möchten Sie unter Solaris Ihre Umgebung so ändern, dass Sie sich in einer POSIX-Umgebung befinden (mit etwas wiePATH=
getconf PATH` und sicher sein, dass es ausgeführt wird/usr/xpg4/bin/sh
), um nicht an Befehlen aus den 70er / 80er Jahren hängen zu bleiben.Zwei Befehle:
id
druckt die Benutzer-ID zusammen mit den Gruppen. Format:uid=usernumber(username) ...
whoami
gibt den aktuellen Benutzernamen anquelle
Wenn Root-Berechtigungen (Sudo-Berechtigungen) erforderlich sind, die bei Verwendung von Skripten normalerweise 90% + betragen, geben Ihnen die Methoden in den vorherigen Antworten immer
root
die Antwort.Das Abrufen des aktuellen "angemeldeten" Benutzers ist genauso einfach, erfordert jedoch den Zugriff auf verschiedene Variablen:
$SUDO_UID
und$SUDO_USER
.Sie können wiederholt werden:
Oder zugewiesen, zum Beispiel:
quelle
In Solaris OS habe ich diesen Befehl verwendet:
Unter Linux - Jemand hat dies bereits in Kommentaren beantwortet.
quelle
Für Bash , KornShell (
ksh
)sh
usw. Viele Ihrer Fragen werden schnell beantwortet durch:So erhalten Sie die Dokumentation für das von Ihnen verwendete System oder in der Regel bequemer:
Google "Mann Funktion"
Dies kann zu unterschiedlichen Ergebnissen führen, wenn Linux und Unix geringfügige Unterschiede aufweisen.
Für diese Frage geben Sie einfach "whoami" in Ihre Shell ein.
So schreiben Sie ein Skript:
quelle
Der Benutzername des aktuellen Benutzers kann in reinem Bash mit der
${parameter@operator}
Parametererweiterung (eingeführt in Bash 4.4) abgerufen werden:Das
:
integrierte (Synonym vontrue
) wird anstelle einer temporären Variablen verwendet, indem das letzte Argument festgelegt wird, in dem gespeichert ist$_
. Wir erweitern es dann (\u
), als wäre es eine Eingabeaufforderungszeichenfolge mit demP
Operator.Dies ist besser als die Verwendung
$USER
, da$USER
es sich nur um eine reguläre Umgebungsvariable handelt. Es kann geändert, deaktiviert usw. werden. Auch wenn es nicht absichtlich manipuliert wird, ist ein häufiger Fall, in dem es immer noch falsch ist, wenn der Benutzer gewechselt wird, ohne eine Anmeldeshell zu starten (su
Standardeinstellung).quelle
Auf den meisten Linux-Systemen liefert die Benutzer-ID, wenn Sie einfach whoami in die Befehlszeile eingeben .
Unter Solaris müssen Sie möglicherweise die Benutzer-ID ermitteln, indem Sie die UID des angemeldeten Benutzers über den folgenden Befehl ermitteln.
Sobald die UID bekannt ist, suchen Sie den Benutzer, indem Sie die UID mit der
/etc/passwd
Datei abgleichen .quelle
Ruft das user_struct der aktuellen Aufgabe ab
quelle