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
shell
symlink
cd-command
DScript
fuente
fuente

Respuestas:
Esa es una característica del shell que recuerda cómo llegaste a donde estás.
Si lo has
realpathinstalado puedes hacer:Y a falta de eso si tienes Python:
o readlink (de coreutils):
o
/bin/pwd(no el shell incorporadopwd):fuente
ls -l /proc/$$/cwdaprovecha la/procinterfaz del sistema de archivos del núcleo .pwd -Ppara imprimir la ruta física, en lugar de lógica, al directorio actual.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..fuente
Otras respuestas han cubierto
/bin/pwdfrente a la de la cáscarabuiltin 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:Otras conchas pueden variar.
fuente