Editar: Este es un duplicado de /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . No tengo la reputación de cerrar esta pregunta como duplicado.
No me refiero ~como en el directorio de inicio, sino más bien esto:
$ ls ~foo/bar
/some/mount/point/foo/bar
Sin embargo, si lo intento con un punto de montaje diferente, por ejemplo:
$ 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
¿Cómo se ~llama en este contexto? ¿Como funciona?
Editar: más información basada en algunos de los comentarios a continuación:
- Puedo dar fe de que
foono es un nombre de usuario en mi sistema. - Al intentar completar automáticamente,
ls -lah ~no se muestran todas las opciones. es decir, puedocd ~qux, cuandoquxno aparece en el autocompletado. De nuevoquxno es un usuario en mi sistema. - Si importa
/some/mount/pointes un recurso compartido de red. - Todos los detalles sugieren alguna ruina de ruta con nombre, una característica de Z shell de expansión de nombre de ruta, pero esto también funciona en bash, que aparentemente no admite cosas como las rutas con nombre de Z shell.
/some/mount/pointdefinitivamente no es mi directorio personal. cd ~me lleva a /Users/$username/partidos --que$HOME
zshparece utilizar también la tilde para indicar directorios con nombre.
bash -c "ls ~foo/bar"), que no tiene directorios con nombre. Además, incluso dentro de zsh, si inspecciono el env, no veo ningún directorio con nombre configurado. Estoy en Mac OS y siento que esta es una característica específica de OS X.
~foo. Tome la cadena real (no el ejemplo foo) y haga grep "actual username" /etc/passwd. ~textdebería funcionar solo para posibles nombres de usuario de inicio de sesión de acuerdo con el manual de bash (no necesariamente significa que realmente pueda iniciar sesión; en el caso de usuarios del sistema como ~lp, por ejemplo). En todas mis pruebas, ~stringcorresponde con stringser nombre de usuario.
~fooes el directorio de inicio del usuariofoo. Si no se especifica el usuario, el usuario actual es el predeterminado.