Antworten:
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.
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 )
getenvanstatt davon auszugehen, dass der Standort von passwdnoch einen Schritt weiter ist, als davon auszugehen, dass der Standort von zu Hause ist/home/
Es scheint, dass Sie dieser Benutzer sind - warum nicht
echo $HOME
?
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`
Sobald Sie sich angemeldet, führen cdzu Ihrem Home - Verzeichnis zu gehen, dann laufen pwddas Arbeitsverzeichnis zu drucken.
echo $HOME.
echo ~$usernamees in Ordnung, aber in Sh Eval wird es benötigt, wenn es eine Variable ist