Dentro de un script bash, sé que puedo verificar si un archivo es un enlace simbólico con la siguiente sintaxis
if [ -L $path ]
¿Alguien sabe cómo probaría si esa ruta estaba vinculada a una ruta en particular? Por ejemplo, quiero verificar si el objetivo de $path
es /some/where
.
readlink
ruta conocida y compararla con la ruta que estás probando?if [ -L "$path" ]
) , a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo.Respuestas:
Si desea verificar si
$path
es un enlace simbólico cuyo objetivo es/some/where
, puede usar lareadlink
utilidad. No es POSIX, pero está disponible en muchos sistemas (GNU / Linux, BusyBox, * BSD, ...).Tenga en cuenta que esta es una comparación de texto exacta. Si el objetivo del enlace es
/some//where
, o si eswhere
y el valor de$path
es/some/link
, entonces los textos no coincidirán.Muchas versiones
readlink
admiten la opción-f
, que canoniza la ruta al expandir todos los enlaces simbólicos.Muchos shells, incluidos dash, ksh, bash y zsh, admiten al
-ef
operador en eltest
builtin para probar si dos archivos son iguales (enlaces duros al mismo archivo, después de seguir enlaces simbólicos). Esta característica también es ampliamente compatible pero no POSIX.fuente
Para evitar problemas con una ruta relativa y absoluta, y "/" al final de una ruta o enlace:
fuente
readlink
no parece ser necesario,realpath
resolverá automáticamente el enlace simbólico.