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
fookein Benutzername auf meinem System ist. - Beim Versuch der automatischen Vervollständigung werden
ls -lah ~nicht alle Optionen angezeigt. dh ich kanncd ~qux, wennquxnicht in der Autovervollständigung angezeigt wird. Wiederquxist kein Benutzer in meinem System. - Wenn es darauf ankommt,
/some/mount/pointhandelt 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/pointdefinitiv nicht mein Home-Verzeichnis. cd ~bringt mich zu - /Users/$username/welche Spiele$HOME
zshscheint auch die Tilde zu verwenden, um benannte Verzeichnisse anzugeben.
bash -c "ls ~foo/bar") - ohne benannte Verzeichnisse. Außerdem envsehe 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. ~textsollte 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 ~lpzum Beispiel). In all meinen Tests ~stringentspricht das stringdem Benutzernamen.
~fooist das Home-Verzeichnis des Benutzersfoo. Wenn der Benutzer nicht angegeben ist, ist der aktuelle Benutzer der Standard.