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
foo
no 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
, cuandoqux
no aparece en el autocompletado. De nuevoqux
no es un usuario en mi sistema. - Si importa
/some/mount/point
es 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/point
definitivamente no es mi directorio personal. cd ~
me lleva a /Users/$username/
partidos --que$HOME
zsh
parece 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
. ~text
deberí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, ~string
corresponde con string
ser nombre de usuario.
~foo
es el directorio de inicio del usuariofoo
. Si no se especifica el usuario, el usuario actual es el predeterminado.