Antworten:
eval echo "~$USER"
davon ausgehen, dass $USER
diese keine Sonderzeichen enthalten. Zum Beispiel wenn USER="foo\$bar"
, dann wenn wir eval
die Shell $bar
in Ihre Ausgabe einsetzen, was nicht das ist, was Sie wollen. Wenn Sie diesen Weg einschlagen, müssen Sie grundsätzlich sicherstellen, dass $USER
es 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 )
getenv
anstatt davon auszugehen, dass der Standort von passwd
noch 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 cd
zu Ihrem Home - Verzeichnis zu gehen, dann laufen pwd
das Arbeitsverzeichnis zu drucken.
echo $HOME
.
echo ~$username
es in Ordnung, aber in Sh Eval wird es benötigt, wenn es eine Variable ist