Holen Sie sich das Home-Verzeichnis nach Benutzername

84

Ich möchte das Home-Verzeichnis eines Benutzers mit Echo erhalten

echo ~puchuu
>> /home/puchuu

Aber ich kann Variable nicht verwenden

echo ~$USER
>> ~puchuu
echo `echo ~$USER`
>> ~puchuu
Puchu
quelle

Antworten:

86

Sie können verwenden eval:

eval echo ~$USER

Aber siehe Andrews Kommentar und Glenns Antwort unten.

Choroba
quelle
8
In Bash Eval wird es nicht benötigt, nur ist echo ~$usernamees in Ordnung, aber in Sh Eval wird es benötigt, wenn es eine Variable ist
Felipe Alcacibar
Dies gibt manchmal den falschen Wert, möglicherweise den Basisordner eines vorherigen Kontos mit demselben Benutzernamen?
Andrew
@ AndrewMacFie: Was meinst du mit "vorhergehend"?
Choroba
1
@choroba Fügen Sie einen Benutzer hinzu, löschen Sie den Benutzer und fügen Sie dann einen Benutzer mit demselben Benutzernamen hinzu. Wenn der Basisordner des Benutzers beim zweiten Mal anders ist, gibt dieser Befehl den ursprünglichen Basisordner anstelle des aktuellen Ordners an. Glenn Jackmans Antwort gibt die aktuelle.
Andrew
Beachten Sie auch, dass die Shell möglicherweise keine Sonderzeichen interpretiert , wenn Sie eval echo "~$USER"davon ausgehen, dass $USERdiese keine Sonderzeichen enthalten. Zum Beispiel wenn USER="foo\$bar", dann wenn wir evaldie Shell $barin Ihre Ausgabe einsetzen, was nicht das ist, was Sie wollen. Wenn Sie diesen Weg einschlagen, müssen Sie grundsätzlich sicherstellen, dass $USERes sich um eine vernünftige Eingabe handelt. Meistens wird es wahrscheinlich sein, aber Sie sollten dies berücksichtigen.
Zorawar
65

Das könnte für Sie funktionieren:

homedir=$( getent passwd "$USER" | cut -d: -f6 )

Dies funktioniert auch für Benutzer, die nicht Sie sind. Zum Beispiel,

homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
Glenn Jackman
quelle
Dies ist legitim, getenvanstatt davon auszugehen, dass der Standort von passwdnoch einen Schritt weiter ist, als davon auszugehen, dass der Standort von zu Hause ist/home/
Evan Carroll
13

Es scheint, dass Sie dieser Benutzer sind - warum nicht

echo $HOME

?

Greenoldman
quelle
3
Dies funktioniert nicht, wenn Sie sich in einer sudo'ed-Umgebung befinden und sudo die Flags -H oder -i nicht übergeben haben. $ HOME ist weiterhin das Ausgangsverzeichnis des vorherigen (sudo'ing) Benutzers.
Asfand Qazi,
1

Ich weiß nicht, ob es hilft, aber das Platzieren der Tilde außerhalb des Ausdrucks funktioniert in ZSH, aber nicht in Bash:

echo ~`echo $USER`
Pedro Penna
quelle
0

Sobald Sie sich angemeldet, führen cdzu Ihrem Home - Verzeichnis zu gehen, dann laufen pwddas Arbeitsverzeichnis zu drucken.

Vinoth Hari
quelle
Das wird nicht funktionieren. Die Idee hier ist, dies in Shell-Skript zu tun, und vermutlich ohne die Anmeldeinformationen des betreffenden Benutzers erforderlich ...
SamB
-1 aus dem gleichen Grund, den SamB erwähnt hat. Ich habe Ihre Antwort bearbeitet, weil ich möchte, dass Sie erfahren, wie Sie die Markdown-Formatierung verwenden und präziser vorgehen. Sie haben auch die viel einfachere Methode verpasst, die einfach ist echo $HOME.
wjandrea