Digamos que tiene directorios /dir1y /dir2/linked, donde este último es un enlace simbólico al primero.
Cuando cda linkedy pwd, se obtiene la salida /dir2/linked. Si entonces cd .., te pondrán /dir2. Este comportamiento es consistente con el concepto de estar en el /dir2/linkedpasado. Sin embargo, según tengo entendido, el directorio padre ( ..) de cualquier directorio se almacena en el inodo del directorio (es decir, físicamente en el disco). Obviamente, como /dir2/linkedes realmente /dir1, el directorio padre en el inodo debe ser/
Para complicar aún más las cosas, dentro /dir2/linked, las salidas de ls ..y cd .. ; ls .son diferentes. Parece que cdhonra la ruta de enlace simbólico, mientras que lshonra la ruta "física". Sin embargo, como se menciona en esta pregunta , hay cd -Ppara este caso de uso.
man pwd menciona directorios de trabajo "físicos" y "lógicos", pero todavía tengo algunas preguntas en este punto:
- ¿Es este comportamiento siempre proporcionado por la
PWDvariable de entorno, como se menciona enman pwd? - ¿Por qué usar valores predeterminados
cdylstener comportamientos diferentes, si ambos son comandos de shell (es decir, no programas)? - ¿ Utiliza el programa típico (no el comando de shell) en
PWDlugar de la ruta física? Me doy cuenta de que depende de la implementación, pero ¿hay alguna regla general?
fuente

Respuestas:
bash"sabe" sobre enlaces simbólicos y rastrea esta información cuando usa un enlace simbólico para ingresar a un directorio.Puede verificar esto haciendo lo siguiente en su ejemplo:
Debe comenzar el bash con una
PWDvariable vacía , de lo contrario, utiliza ese truco para mostrar la ruta "falsa".Tenga en cuenta que
lses un programa separado y, como tal, no tiene el conocimiento de bash de cómo llegó al directorio actual, porls ..lo que solo mostrará el contenido del directorio principal real , no en relación con el enlace simbólico que siguió.La mayoría de los programas no dependerán de la variable de entorno,
CWDya que hay muchas formas de iniciar programas, a través del shell bash es solo uno, por lo que no es confiable esperarCWDque contenga el valor correcto (intente configurarCWDalgo incorrecto antes de hacerlobash -c pwd, puede ver que verifica El valor para la cordura).fuente
PWDcomo tal, pero por sí mismo esto no responde a las preguntas que he mencionadolsde que bashhelpme había proporcionado, pero tú y tú me convenciste de lo contrario. Eso hace las cosas mucho más claras, ¡gracias!PWDes estándar en POSIX. Puede confiar en que se establezca. Si no está configurado, las cosas podrían romperse, por ejemplo, lapwdutilidad : Consulte también Variables de entorno .