¿Puede alguien explicarme las siguientes opciones de readlink
? comando en lenguaje sencillo:
-f, --canonicalize
canonicalize by following every symlink in every component of
the given name recursively; all but the last component must
exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of
the given name recursively, all components must exist
-m, --canonicalize-missing
canonicalize by following every symlink in every component of
the given name recursively, without requirements on components
existence
Respuesta aceptada:
Creo que se explica por sí mismo, así que realmente no sé qué parte te suena ambigua...
Veamos con un ejemplo:
–canonicalizar
$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp
$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir
$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt
Cualesquiera que sean las opciones, readlink
will:
– traducir la ruta relativa a la ruta absoluta
– traducir el nombre del enlace simbólico a la ruta real
Y como puedes ver arriba, con -f
, readlink
no le importa si la última parte de esta ruta (aquí nonexistentfile.txt
) existe o no.
Si no existe otra parte de esta ruta, readlink
no generará nada y tendrá un código de retorno diferente a 0 (lo que significa que ocurrió un error). Ver:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonicalizar-existente
Si intenta lo mismo con -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Con -e
, en caso de que alguno de los componentes de la ruta no exista, readlink
no generará nada y tendrá un código de retorno diferente a 0.
–canonicalize-missing
-m
opción es lo contrario de -e
. No se realizará ninguna prueba para verificar si existen los componentes de la ruta:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar