Edycja: Jest to duplikat /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Nie mam reputacji, aby zamknąć to pytanie jako duplikat.
Nie mówię o tym ~
jak w katalogu domowym, ale raczej o tym:
$ ls ~foo/bar
/some/mount/point/foo/bar
Jeśli jednak spróbuję użyć innego punktu montowania, np .:
$ 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
Jak ~
nazywa się w tym kontekście? Jak to działa?
Edycja: Więcej informacji na podstawie niektórych poniższych komentarzy:
- Mogę zaświadczyć, że
foo
nie jest to nazwa użytkownika w moim systemie. - Podczas próby autouzupełniania
ls -lah ~
nie są wyświetlane wszystkie opcje. tzn. jestem w staniecd ~qux
, gdyqux
nie pojawia się w autouzupełnianiu. Ponowniequx
nie jest użytkownikiem w moim systemie. - Jeśli to ważne,
/some/mount/point
to udział sieciowy. - Wszystkie szczegóły sugerują pewne nazwane muckery ścieżek, funkcję powłoki Z w rozszerzaniu nazw ścieżek, ale działa to również w bash, która najwyraźniej nie obsługuje rzeczy takich jak nazwane ścieżki powłoki Z.
/some/mount/point
zdecydowanie nie jest to mój katalog domowy. cd ~
zabiera mnie do - /Users/$username/
które mecze$HOME
zsh
wydaje się również używać tyldy do wskazania nazwanych katalogów.
bash -c "ls ~foo/bar"
) - która nie ma nazwanych katalogów. Co więcej, nawet w Zsh, jeśli sprawdzę env
, nie widzę skonfigurowanych nazwanych katalogów. Korzystam z systemu Mac OS i wydaje mi się, że jest to funkcja specyficzna dla systemu OS X.
~foo
. Weź aktualny ciąg (nie przykład foo
) i zrób grep "actual username" /etc/passwd
. ~text
powinien działać tylko dla możliwych nazw logowania, zgodnie z instrukcją bash (niekoniecznie oznacza, że jest w stanie się zalogować; w przypadku użytkowników systemu, takich jak ~lp
na przykład). We wszystkich moich testach ~string
odpowiada to string
byciu nazwą użytkownika.
~foo
jest katalogiem domowym użytkownikafoo
. Jeśli użytkownik nie zostanie określony, bieżącym użytkownikiem będzie domyślny.