Qualcuno può spiegarmi le seguenti opzioni di readlink
comando in linguaggio semplice:
-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
Risposta accettata:
Penso che sia abbastanza autoesplicativo, quindi non conosco davvero la parte che ti suona ambigua...
Vediamo con un esempio:
–canonicizzare
$ 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
Qualunque siano le opzioni, readlink
will:
– tradurrà il percorso relativo in percorso assoluto
– tradurrà il nome del collegamento simbolico nel percorso reale
E come puoi vedere sopra, con -f
, readlink
non importa se l'ultima parte di questo percorso (qui nonexistentfile.txt
) esiste o no.
Se un'altra parte di questo percorso non esiste, readlink
non produrrà nulla e avrà un codice di ritorno diverso da 0 (il che significa che si è verificato un errore). Vedi:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–canonizzare-esistente
Se provi lo stesso con -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Con -e
, nel caso in cui uno qualsiasi dei componenti del percorso non esista, readlink
non produrrà nulla e avrà un codice di ritorno diverso da 0.
–canonicizzare-mancante
-m
l'opzione è l'opposto di -e
. Non verrà effettuato alcun test per verificare se i componenti del percorso esistono:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar