ls... no funciona correctamente con enlaces simbólicos

ls... no funciona correctamente con enlaces simbólicos

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. ~/codeJurarí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 chdirsino 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 lssi desea obtener lo que espera. zshLa opción CHASE_DOTSte 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 zshSupongo 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_LINKSy/o CHASE_DOTS. Para confirmar eso, ejecute setopt | grep -i chasey vea si están en la lista. Si es así, simplemente desactívelos:

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS

información relacionada