¿Cuál es la forma más sólida de analizar el debian/changelogarchivo 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:123deberí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-parsechangelogse verá así.Version: 0.6.11-2Si desea que algo haga un análisis más robusto deldebian/controlformato, puede usarpython-debianolibparse-debcontrol-perl.dpkg-parsechangelogfunciona, 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-parsechangelogsalida 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: blahlínea " " en la salida siempre estará presente, y siempre será una sola línea en su propio.Sin embargo,
dpkg-parsechangeloges 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
changelogarchivo válido que utilice el formato estándar (y losdebian/changelogformatos 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