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/path
directamente.
pwd -P
oalias pwd='pwd -P'
tambiéncd -P
ir a la ruta física en lugar del enlace simbólico.Respuestas:
Su caparazón tiene un incorporado
pwd
, que trata de ser "inteligente". Después decd
hacer un enlace simbólico, el internopwd
falsifica la salida como si se hubiera movido a un directorio real.Pase la
-P
opción apwd
, es decir, ejecutarpwd -P
. La-P
opción (para "físico") le dice quepwd
no 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:fuente
Tratar
cd -P <symlink_dirname>
.También puede usar
set -o physical
para hacer que este comportamiento persista durante la vida útil del shell en ejecución.Echa un vistazo a https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links para obtener más información.
fuente