Bearbeiten: Dies ist ein Duplikat von /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Ich habe nicht den Ruf, diese Frage als Duplikat zu schließen.
Ich beziehe mich nicht auf ~
das Home-Verzeichnis, sondern auf Folgendes:
$ ls ~foo/bar
/some/mount/point/foo/bar
Wenn ich es jedoch mit einem anderen Einhängepunkt versuche, z.
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
Wie heißt das ~
in diesem Zusammenhang? Wie funktioniert es?
Bearbeiten: Weitere Informationen basierend auf einigen der folgenden Kommentare:
- Ich kann bestätigen, dass dies
foo
kein Benutzername auf meinem System ist. - Beim Versuch der automatischen Vervollständigung werden
ls -lah ~
nicht alle Optionen angezeigt. dh ich kanncd ~qux
, wennqux
nicht in der Autovervollständigung angezeigt wird. Wiederqux
ist kein Benutzer in meinem System. - Wenn es darauf ankommt,
/some/mount/point
handelt es sich um eine Netzwerkfreigabe. - Alle Details deuten auf ein benanntes Pfad-Muckery hin, eine Z-Shell-Funktion der Pfadnamenerweiterung, aber dies funktioniert auch in Bash, das anscheinend Dinge wie die benannten Pfade der Z-Shell nicht unterstützt.
/some/mount/point
definitiv nicht mein Home-Verzeichnis. cd ~
bringt mich zu - /Users/$username/
welche Spiele$HOME
zsh
scheint auch die Tilde zu verwenden, um benannte Verzeichnisse anzugeben.
bash -c "ls ~foo/bar"
) - ohne benannte Verzeichnisse. Außerdem env
sehe ich selbst innerhalb von zsh, wenn ich das inspiziere , keine benannten Verzeichnisse eingerichtet. Ich bin unter Mac OS und ich denke, dies ist eine spezifische Funktion für OS X.
~foo
. Nehmen Sie die eigentliche Zeichenfolge (nicht das Beispiel foo
) und tun Sie dies grep "actual username" /etc/passwd
. ~text
sollte nur für mögliche Login-Benutzernamen gemäß dem Bash-Handbuch funktionieren (bedeutet nicht unbedingt, dass es tatsächlich möglich ist, sich anzumelden; bei Systembenutzern wie ~lp
zum Beispiel). In all meinen Tests ~string
entspricht das string
dem Benutzernamen.
~foo
ist das Home-Verzeichnis des Benutzersfoo
. Wenn der Benutzer nicht angegeben ist, ist der aktuelle Benutzer der Standard.