Hay varios realpath
comandos alrededor.
La realpath
utilidad es un envoltorio alrededor de las realpath
funciones de la biblioteca y se ha reinventado muchas veces .
Debian solía mantener un realpath
paquete ( separado de dwww
desde woody ) que no ha cambiado, excepto en relación con el embalaje y la documentación desde 2001, pero ahora se ha eliminado. Esta utilidad quedó en desuso porque ahora hay más alternativas estándar (GNU readlink
y pronto GNU realpath
), pero en ese momento, las utilidades de GNU ni siquiera tenían readlink
. Esta implementación de algunos realpath
admite algunos options
para evitar la resolución de enlace simbólico o producir una salida con terminación nula.
BusyBox también incluye su propio realpath
comando (que no tiene opción).
GNU coreutils introdujo un realpath
comando en la versión 8.15 en enero de 2012. Este es un reemplazo compatible para BusyBox y Debian realpath
, y también tiene muchas opciones en común con GNU readlink
.
realpath
tiene el mismo efecto que readlink -f
con GNU readlink
. Lo que distingue los dos comandos (o más bien los diversos realpath
comandos readlink -f
) son las opciones adicionales que admiten.
GNU realpath
no está en desuso; tiene el problema opuesto: es demasiado nuevo para estar disponible en todas partes. Debian solía omitir GNUrealpath
de su coreutils
paquete y quedarse con el suyo realpath
. No sé por qué, ya que GNU realpath
debería ser un reemplazo directo. A partir de Debian jessie y Ubuntu 16.04, sin embargo, realpath
se utiliza GNU .
En los sistemas Linux, en este momento, su mejor opción para canonizar una ruta que puede contener enlaces simbólicos es readlink -f
.
Los sistemas BSD tienen un readlink
comando, con diferentes capacidades de GNU readlink
. En particular, BSD readlink
no tiene una opción para canonizar las rutas, solo atraviesa el enlace simbólico que se le pasó.
readlink
Por cierto, tenía el mismo problema: también se inventó muchas veces (no agregar esta utilidad cuando se agregaron enlaces simbólicos a Unix fue una omisión lamentable). Ahora se ha estabilizado en varias implementaciones con muchos indicadores incompatibles (en particular BSD vs. GNU).
readlink -f
estaba en OpenBSD mucho antes de GNU. Todos NetBSD, FreeBSD y OpenBSD ahora tienenreadlink -f
(su enlace incluso lo menciona).realpath
ha estado en FreeBSD e IRIX durante mucho tiempo (no sé si es anterior al de Debian). HPUX e IRIX también tienenreadlink
, aunque no-f
. Elrealpath
paquete en Debian experimental ahora es el de coreutils (como un experimento para ver si rompe cosas). El dwwwrealpath
actúa más comoreadlink -e
el GNU,readlink -f
por lo que no es un reemplazo completo de Dropinrealpath
ha estado en FreeBSD desde 2002. Antes de eso,pwd
lo estaba haciendo (desde el año 2000,pwd some-file
se llamerealpath()
enfile
). Debian ha tenido unrealpath
paquete desde 1996. El de IRIX, probablemente anterior a él sin embargo no he encontrado ninguna evidencia aparte de que era en IRIX 6.5 en 1998. OpenBSD añadió una-f
areadlink
en 1997 . GNU agregóreadlink
en 2003 y lo tuvo-f
desde el principio.realpath
. ¿Alguien sabe si es de alguna manera diferente de lareadlink -f
versión?tl; dr
readlink -f
regresará0
para un archivo inexistente en un directorio existente mientras querealpath
retorna1
. Sin embargo,readlink -e
se comportará comorealpath
y regresará1
para un archivo inexistente (vea la nota del editor al final).readlink -f
readlink -e
realpath
readlink -f
con directorio inexistentereadlink -f
El comportamiento varía dependiendo de qué parte de la ruta no existe.Disponibilidad
readlink
está instalado en la mayoría de las distribuciones de Linux. Mientras que, arealpath
menudo se debe instalar explícitamente.En resumen
Si desea reemplazar llamadas para
realpath ...
luego usarreadlink -e ...
.Probado con readlink (GNU coreutils) 8.21 y realpath versión 1.19 en Ubuntu 16.
( Ed .: @AnthonyGeoghegan escribió " esto se refiere a la versión Debian de
realpath
. La versión GNU de serealpath
comporta igual quereadlink -f
")fuente
realpath
. La versión GNU de serealpath
comporta igual quereadlink -f
.