explicar las opciones del command readlink

¿Alguien puede por favor explicarme las siguientes opciones del command readlink en un lenguaje simple:

  -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 

Related of "explicar las opciones del command readlink"

Creo que es bastante claro, así que no sé cuál es la parte que suena ambigua para ti … Veamos 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 

Sean cuales sean las opciones, readlink : – traducirá la ruta relativa a la ruta absoluta – traducirá el nombre de enlace simbólico a la ruta real

Y como puede ver arriba, con -f , readlink no importa si la última parte de esta ruta (aquí nonexistentfile.txt ) existe o no.

Si no existe otra parte de esta ruta, readlink generará nada y tendrá un código de retorno diferente de 0 (lo que significa que se produjo un error). Ver:

 $ readlink -f /tmp/fakedir/foo.txt $ echo $? 1 

–canonicalizar -existente

Si testing 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 ruta no exista, readlink generará nada y tendrá un código de retorno diferente de 0.

–canonicalizar-desaparecido

-m opción es lo opuesto a -e . No se realizará ninguna testing para verificar si los componentes de la ruta existen:

 $ readlink -m ./subdir/link/fakedir/fakefile /tmp/realdir/fakedir/fakefile $ ln -s /nonexistent /tmp/subdir/brokenlink $ readlink -m ./subdir/brokenlink/foobar /nonexistent/foobar 

que me confundió fue por qué alguien necesitaría -e y -m opciones?

Del código fuente del núcleo ./scripts/kconfig/merge_config.sh (el script toma una list de valores de fragment de configuration y los combina uno a uno):

 if [ -z "$KCONFIG_CONFIG" ]; then if [ "$OUTPUT" != . ]; then KCONFIG_CONFIG=$(readlink -m -- "$OUTPUT/.config") else KCONFIG_CONFIG=.config fi fi 

KCONFIG_CONFIG recibe la ruta al file .config que aún no existe.