Tengo directorios configurados un poco así.
~/code
~/code/src
~/code/build -> /path/to/somewhere/else
Ese último es un enlace simbólico.
si hago esto
cd ~/code/build
ls ..
luego obtengo el listado de /path/to/somewhere
, pero deotras observacionesY según mi propia experiencia, esperaba ver la lista. ~/code
Juraría que esto solía funcionar al revés.
Estoy usando zsh y bash en Ubuntu. ¿Existe una configuración para esto o está profundamente arraigado en POSIX o algo así?
Respuesta1
No es la cuestión de ls
. Así es como funcionan los enlaces simbólicos. Lo ..
lleva al directorio principal del directorio actual, el directorio no sabe que llegó a él a través de un enlace simbólico. El caparazón tiene que intervenir para evitar este comportamiento. Para el shell incorporado cd
, existe un manejo especial que no solo llama chdir
sino que memoriza la ruta completa del directorio e intenta descubrir lo que desea. ls
, sin embargo, no es una función incorporada. El shell tiene que cambiar ..
a una ruta diferente antes de pasarlo ls
si desea obtener lo que espera. zsh
La opción CHASE_DOTS
te ayuda con eso.
En términos generales, los enlaces simbólicos a directorios son un negocio sucio. Para aplicaciones críticas y semipermanentes, utilice mount --bind
.
Respuesta2
Como etiquetó su pregunta con zsh
Supongo que estamos hablando de este caparazón.
Lo más probable es que hayas configurado (ya sea directa o indirectamente con algún script externo como oh-my-zsh
) las variables CHASE_LINKS
y/o CHASE_DOTS
. Para confirmar eso, ejecute setopt | grep -i chase
y vea si están en la lista. Si es así, simplemente desactívelos:
unsetopt CHASE_DOTS
unsetopt CHASE_LINKS