¿Cuál es la forma más sólida de analizar el debian/changelog
archivo de un paquete fuente (o debian/control
?) Para obtener el número de versión del paquete? Algo como:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Quiero extraer el número de versión (y solo el número de versión) para poder manipularlo en un script.
Esperaba encontrar una dpkg-*
utilidad para este propósito, pero aún no la he encontrado.
packaging
deb
source-packages
Richard Hansen
fuente
fuente
Hay numerosas formas de hacer esto.
dpkg-parsechangelog | sed -n 's/^Version: //p'
o alternativamente:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
fuente
deb-control(5)
página de manual no describe claramente el formato y no quiero hacer ninguna suposición. Por ejemplo, no deja claro que los campos deben comenzar en una línea ("Los campos están delimitados solo por etiquetas de campo"). También dice que un campo puede abarcar varias líneas, y no dice nada sobre el espacio entre la etiqueta y el valor, por lo que tal vezVersion:123
debería interpretarse como una continuación del campo anterior y no como un campo de Versión separado (debido a la falta de un espacio después del colon).dpkg-parsechangelog
se verá así.Version: 0.6.11-2
Si desea que algo haga un análisis más robusto deldebian/control
formato, puede usarpython-debian
olibparse-debcontrol-perl
.dpkg-parsechangelog
funciona, y la respuesta anterior que canaliza la salida a través de sed / grep debe ser completamente robusta. Si desea conocer detalles precisos del formato dedpkg-parsechangelog
salida y la mayoría de los otros archivos de control de estilo Debian, consulte RFC 822 . Nunca está bien que una versión del paquete deb contenga una nueva línea, espacio o cualquier otro carácter especial o de control (verman deb-version
), por lo que laVersion: blah
línea " " en la salida siempre estará presente, y siempre será una sola línea en su propio.Sin embargo,
dpkg-parsechangelog
es un programa muy pesado para ejecutarse solo para obtener el número de versión actual de un registro de cambios. Tiene que ejecutar Perl y cargar una cantidad impresionantemente grande de bibliotecas para obtener un resultado, la mayoría de los cuales no utilizará. En plataformas más lentas, o con medios de almacenamiento de archivos lentos, o cuando necesite analizar esta versión muchas veces, resultará muy lento. En su lugar, solo use lo que esté dentro del primer conjunto de paréntesis en la primera línea:Eso le proporcionará la versión correcta del paquete actual con cualquier
changelog
archivo válido que utilice el formato estándar (y losdebian/changelog
formatos no estándar , para todos los fines generales prácticos, nunca se utilizan).fuente
como he visto, la versión del paquete consiste en la parte del encabezado del archivo de registro de cambios. para que puedas hacerlo como
He probado este comando para paquetes instalados, por ejemplo
Y
fuente