Eu acho que é bastante autoexplicativo, então eu realmente não sei a parte que soa ambígua para você ... Vamos ver com um exemplo:
- canoniza
$ 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
Quaisquer que sejam as opções, readlink
irá:
- traduzir o caminho relativo para o caminho absoluto
- traduza o nome do link simbólico para o caminho real
E como você pode ver acima, com -f
, readlink
não se importa se a última parte deste caminho (aqui nonexistentfile.txt
) existe ou não.
Se outra parte deste caminho não existir, readlink
não produzirá nada e terá um código de retorno diferente de 0 (o que significa que ocorreu um erro). Veja:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
- canonicalize-existente
Se você tentar o mesmo com -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Com -e
, caso algum componente do caminho não exista, readlink
não produzirá nada e terá um código de retorno diferente de 0.
- canonicalize-missing
A opção -m
é o oposto de -e
. Nenhum teste será feito para verificar se os componentes do caminho existem:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar