Cuando cd a través de un enlace simbólico, ¿por qué pwd muestra el enlace simbólico en lugar de la ruta real?

19

Creé un enlace suave ( ln -s 1 2) a un directorio que está dentro del testdirectorio y abrí el enlace suave ( cd 2) y visualicé la ruta actual usando pwd. La ruta mostrada era ~/test/2y no ~/test/1.

Es diferente en un sistema operativo como Windows, el acceso directo nos lleva al directorio real. Estoy un poco confundido sobre cómo funciona este enlace suave en Linux. ¿No es un atajo como en Windows? ¿Por qué no es el camino ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
fuente
2
Gracias por eliminar la captura de pantalla. La próxima vez, edite su pregunta en lugar de eliminar y volver a publicar. Eliminar demasiadas de tus propias preguntas puede hacer que no puedas hacerlas. Esa prohibición es automática, por lo que no podremos hacer mucho al respecto. En cualquier caso, no necesita volver a publicar, ya que la edición topa la pregunta .
terdon
¿Por qué preguntas dos veces? askubuntu.com/q/610133/367165
AB
AB mismo foro?
DScript

Respuestas:

18

Esa es una característica del shell que recuerda cómo llegaste a donde estás.
Si lo has realpathinstalado puedes hacer:

$ realpath 
/home/dazz/test/1

Y a falta de eso si tienes Python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

o readlink (de coreutils):

$ readlink -f .
/home/dazz/test/1

o /bin/pwd(no el shell incorporado pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
fuente
ls -l /proc/$$/cwdaprovecha la /procinterfaz del sistema de archivos del núcleo .
Bruce Ediger
8
Tenga en cuenta también pwd -Ppara imprimir la ruta física, en lugar de lógica, al directorio actual.
godlygeek
8

Contraste pwdy /bin/pwd.

pwd, que es un comando integrado en muchos shells, le dice dónde cree que está su shell (y, por lo tanto, trata los enlaces simbólicos "enlaces blandos" como si fueran directorios reales.

/bin/pwdes un programa externo que te dice dónde estás realmente, si es necesario, atravesando el árbol del sistema de archivos hasta /. No tiene en cuenta los enlaces simbólicos porque no existen cuando se atraviesa hacia arriba a través de..

roaima
fuente
6

Otras respuestas han cubierto /bin/pwd frente a la de la cáscara builtin pwd.

Si desea seguir enlaces simbólicos en el estilo de Windows que mencionó, use cd -P: cambiará la variable PWD en consecuencia.

Si desea usar -Pde forma predeterminada, puede agregar esta línea a su .bashrco .zshrc:

set -P

Otras conchas pueden variar.

David Lord
fuente