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

Antworten:


86

Sie können verwenden eval:

eval echo ~$USER

Aber siehe Andrews Kommentar und Glenns Antwort unten.


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 )

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

?


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`

0

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.