Resolviendo enlaces simbólicos (pwd)


32

Digamos que hago lo siguiente:

cd /some/path
ln -s /target/path symbolic_name

Si entonces hacer:

cd /some/path
cd symbolic_name
pwd

Yo obtengo:

/some/path/symblic_name

y no:

/target/path

¿Hay alguna manera de que el shell "resuelva completamente" un enlace simbólico (es decir, actualizar CWD, etc.), como si lo hubiera hecho directamente:

cd /target/path

?

Necesito ejecutar algunos programas que parecen ser "conscientes" o "sensibles" acerca de cómo llego a mi ruta de destino, y me gustaría que piensen que llegué a la ruta de destino como si lo hubiera hecho cd /target/pathdirectamente.


77
Relacionado con esta pregunta . Puede hacer pwd -Po alias pwd='pwd -P'también cd -Pir a la ruta física en lugar del enlace simbólico.
Martín Canaval

@ MartínCanaval Gracias; eso es lo que estaba buscando!
Ryan

Respuestas:


35

Su caparazón tiene un incorporado pwd, que trata de ser "inteligente". Después de cdhacer un enlace simbólico, el interno pwdfalsifica la salida como si se hubiera movido a un directorio real.

Pase la -Popción a pwd, es decir, ejecutar pwd -P. La -Popción (para "físico") le dice que pwdno haga ningún seguimiento simbólico de enlaces y que muestre la ruta "real" al directorio.

Alternativamente, también debería haber un binario real pwd, que no hace (e incluso no puede hacer) este tipo de magia. Solo usa esa explicidad binaria:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.