Existem vários comandos realpath
em volta.
O utilitário realpath
é um wrapper em torno das funções de biblioteca realpath
e tem foi reinventado muitos horários .
O Debian mantém um pacote realpath
( separado de dwww
desde woody ) que não foi alterado, exceto em relação ao empacotamento e documentação desde 2001. Este utilitário foi descontinuado porque agora existem mais alternativas padrão (GNU readlink
e em breve GNU realpath
), mas na época, os utilitários GNU nem sequer tinham readlink
. Esta implementação de realpath
suporta alguns options
para evitar a resoluçà £ o de link simbólico ou produzir uma saÃda terminada com valor nulo.
O BusyBox também inclui o seu próprio realpath
comando (que não tem opção).
GNU coreutils introduziu um realpath
command in versão 8.15 em janeiro de 2012. Este é um substituto compatível para o realpath
do BusyBox e do Debian, e também tem muitas opções em comum com o GNU readlink
.
realpath
tem o mesmo efeito que readlink -f
com o GNU readlink
. O que distingue os dois comandos (ou melhor, os vários comandos realpath
de readlink -f
) são as opções extras que eles suportam.
O GNU realpath
não está obsoleto; tem o problema oposto: é novo demais para estar disponível em todos os lugares. Neste momento, o Debian ainda omite o GNU realpath
do seu coreutils
pacote e varas com seu próprio realpath
. Eu não sei porque, desde GNU realpath
deve ser um substituto de drop-in. A partir do 14.04, o Ubuntu não reconhece o Debian sobre isso.
Em sistemas Linux, no momento, sua melhor aposta para canonizar um caminho que pode conter links simbólicos é readlink -f
.
Os sistemas BSD têm um comando readlink
, com diferentes recursos de GNU readlink
. Em particular, o BSD readlink
não tem uma opção para canonicalizar caminhos, ele apenas percorre o symlink passado para ele.
readlink
, aliás, teve o mesmo problema - também foi inventado várias vezes (não adicionar este utilitário quando links simbólicos foram adicionados ao Unix foi uma omissão lamentável). Ele agora estabilizou em várias implementações com muitos flags incompatíveis (em particular BSD vs. GNU).