Hay varios realpathcomandos alrededor.
La realpathutilidad es un envoltorio alrededor de las realpathfunciones de la biblioteca y se ha reinventado muchas veces .
Debian solía mantener un realpathpaquete ( separado de dwwwdesde 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 readlinky pronto GNU realpath), pero en ese momento, las utilidades de GNU ni siquiera tenían readlink. Esta implementación de algunos realpathadmite algunos optionspara evitar la resolución de enlace simbólico o producir una salida con terminación nula.
BusyBox también incluye su propio realpathcomando (que no tiene opción).
GNU coreutils introdujo un realpathcomando 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.
realpathtiene el mismo efecto que readlink -fcon GNU readlink. Lo que distingue los dos comandos (o más bien los diversos realpathcomandos readlink -f) son las opciones adicionales que admiten.
GNU realpathno está en desuso; tiene el problema opuesto: es demasiado nuevo para estar disponible en todas partes. Debian solía omitir GNUrealpath de su coreutilspaquete y quedarse con el suyo realpath. No sé por qué, ya que GNU realpathdebería ser un reemplazo directo. A partir de Debian jessie y Ubuntu 16.04, sin embargo, realpathse 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 readlinkcomando, con diferentes capacidades de GNU readlink. En particular, BSD readlinkno tiene una opción para canonizar las rutas, solo atraviesa el enlace simbólico que se le pasó.
readlinkPor 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 -festaba en OpenBSD mucho antes de GNU. Todos NetBSD, FreeBSD y OpenBSD ahora tienenreadlink -f(su enlace incluso lo menciona).realpathha 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. Elrealpathpaquete en Debian experimental ahora es el de coreutils (como un experimento para ver si rompe cosas). El dwwwrealpathactúa más comoreadlink -eel GNU,readlink -fpor lo que no es un reemplazo completo de Dropinrealpathha estado en FreeBSD desde 2002. Antes de eso,pwdlo estaba haciendo (desde el año 2000,pwd some-filese llamerealpath()enfile). Debian ha tenido unrealpathpaquete 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-fareadlinken 1997 . GNU agregóreadlinken 2003 y lo tuvo-fdesde el principio.realpath. ¿Alguien sabe si es de alguna manera diferente de lareadlink -fversión?tl; dr
readlink -fregresará0para un archivo inexistente en un directorio existente mientras querealpathretorna1. Sin embargo,readlink -ese comportará comorealpathy regresará1para un archivo inexistente (vea la nota del editor al final).readlink -freadlink -erealpathreadlink -fcon directorio inexistentereadlink -fEl comportamiento varía dependiendo de qué parte de la ruta no existe.Disponibilidad
readlinkestá instalado en la mayoría de las distribuciones de Linux. Mientras que, arealpathmenudo 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 serealpathcomporta igual quereadlink -f")fuente
realpath. La versión GNU de serealpathcomporta igual quereadlink -f.