it-swarm.com.de

Aktuellen Benutzernamen in bash abrufen?

Ich schreibe ein Programm in bash, das den Benutzernamen des Benutzers benötigt. 

Ich habe von einer Sache namens whoami gehört, aber ich habe keine Ahnung, was sie macht oder wie man sie benutzt. 

Welchen Befehl verwende ich, um den aktuellen Benutzernamen zu erhalten? 

227
George

Geben Sie in der Befehlszeile ein

echo "$USER"

oder

whoami

Speichern Sie diese Werte in einer Variablen

myvariable=$(whoami)

oder 

myvariable=$USER

Natürlich müssen Sie keine Variable erstellen, da dies die $USER-Variable ist.

335
SethMMorton

alternative zu whoami ist id -u -n.

id -u gibt die Benutzer-ID zurück (z. B. 0 für root).

55
Brett

Einen Hack, den ich unter Solaris 9 und Linux verwendet habe und der für beide gut funktioniert:

ps -o user= -p $$ | awk '{print $1}'

Dieses Snippet gibt den Namen des Benutzers mit der aktuellen EUID aus.

HINWEIS: Sie benötigen hier Bash als Interpreter.

Unter Solaris haben Sie Probleme mit den oben beschriebenen Methoden:

  • id akzeptiert keine -u- und -n-Parameter (daher müssen Sie die Ausgabe parsen)
  • whoami ist nicht vorhanden (standardmäßig)
  • who am I druckt den Besitzer des aktuellen Terminals (ignoriert die EUID)
  • Die Variable $USER wird erst nach dem Lesen von Profildateien (z. B. /etc/profile) korrekt festgelegt.
16
Elvenfighter

Zwei Befehle:

  1. id druckt die Benutzer-ID zusammen mit den Gruppen . Format: uid=usernumber(username) ...

  2. whoami gibt den aktuellen Benutzernamen an

11

Verwenden Sie den Standardbefehl Unix/Linux/BSD/MacOS logname, um den angemeldeten Benutzer abzurufen. Dies ignoriert sowohl die Umgebung als auch Sudo, da diese Reporter unzuverlässig sind. Es wird immer den Namen des angemeldeten Benutzers gedruckt und dann beendet. Dieser Befehl existiert seit etwa 1981.

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ Sudo logname
Password:
devin
My-Mac:~ devin$ Sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root
11
Devin R

Wenn Root-Berechtigungen (Sudo-Berechtigungen) erforderlich sind (normalerweise 90% + bei Verwendung von Skripts), geben die obigen Methoden immer root als Antwort an.

Um den aktuellen "angemeldeten" Benutzer zu erhalten, ist er genauso einfach, erfordert jedoch den Zugriff auf verschiedene Variablen: $Sudo_UID und $Sudo_USER.

Sie können wiederholt werden:

echo $Sudo_UID
echo $Sudo_USER

oder zugewiesen, z.B.

myuid=$Sudo_UID
myuname=$Sudo_USER
6
OldManRiver

In Solaris OS habe ich diesen Befehl verwendet.

$ who am i     # remember to use it with space.

Unter Linux hat dies bereits jemand in Kommentaren beantwortet.

$ whoami       # without space
5
Lin-man

Für bash/ksh/sh usw. Viele Ihrer Fragen werden schnell beantwortet durch:

man [function]

um die Dokumentation für das von Ihnen verwendete System zu erhalten.

oder normalerweise bequemer: google "man function" Dies kann zu unterschiedlichen Ergebnissen führen, wenn Linux und Unix geringfügige Unterschiede aufweisen.

Bei dieser Frage geben Sie einfach "whoami" in Ihre Shell ein.

So erstellen Sie ein Skript:

myvar=$(whoami)

5
Fred Mitchell

Der Benutzername des aktuellen Benutzers kann in reiner Bash mit der Parametererweiterung ${[email protected]} (eingeführt in Bash 4.4) abgerufen werden:

$ : \\u
$ printf '%s\n' "${[email protected]}"

Das integrierte : (Synonym für true) wird anstelle einer temporären Variablen verwendet, indem das letzte Argument festgelegt wird, das in $_ gespeichert ist. Wir erweitern es dann (\u), als wäre es eine Eingabeaufforderungszeichenfolge mit dem Operator P.

Dies ist besser als die Verwendung von $USER, da $USER nur eine reguläre Umgebungsvariable ist. Es kann modifiziert, nicht gesetzt werden usw. Auch wenn es nicht absichtlich manipuliert wird, ist es häufig der Fall, dass der Benutzer ohne Starten einer Login-Shell gewechselt wird (Standardeinstellung su).

1
Crestwave

Bei den meisten Linux-Systemen wird durch Eingabe von whoami in die Befehlszeile die Benutzer-ID angegeben.

Unter Solaris müssen Sie jedoch möglicherweise die Benutzer-ID ermitteln, indem Sie die UID des Benutzers ermitteln, der über den folgenden Befehl angemeldet ist. 

echo $UID

Wenn die UID bekannt ist, suchen Sie den Benutzer, indem Sie die UID mit der Datei/etc/passwd abgleichen. 

cat /etc/passwd | cut -d":" -f1,3
0
John