Creé un enlace suave ( ln -s 1 2
) a un directorio que está dentro del test
directorio y abrí el enlace suave ( cd 2
) y visualicé la ruta actual usando pwd
. La ruta mostrada era ~/test/2
y 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
realpath
instalado 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/$$/cwd
aprovecha la/proc
interfaz del sistema de archivos del núcleo .pwd -P
para imprimir la ruta física, en lugar de lógica, al directorio actual.Contraste
pwd
y/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/pwd
es 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/pwd
frente 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
-P
de forma predeterminada, puede agregar esta línea a su.bashrc
o.zshrc
:Otras conchas pueden variar.
fuente