Quelle est la façon la plus robuste pour analyser d'un paquet source debian/changelog
de fichier (ou debian/control
?) Pour obtenir le numéro de version du package? Quelque chose comme:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Je veux extraire le numéro de version (et que le numéro de version) pour que je puisse le manipuler dans un script.
Je me attendais à trouver un dpkg-*
utilitaire à cet effet, mais je ne l' ai pas encore trouvé.
packaging
deb
source-packages
Richard Hansen
la source
la source
Il existe de nombreuses façons de procéder.
dpkg-parsechangelog | sed -n 's/^Version: //p'
Ou bien:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
la source
deb-control(5)
page de manuel ne décrit pas clairement le format et je ne veux faire aucune hypothèse. Par exemple, il ne précise pas que les champs doivent commencer sur une ligne ("Les champs sont délimités uniquement par des balises de champ."). Il indique également qu'un champ peut s'étendre sur plusieurs lignes, et il ne dit rien sur l'espacement entre la balise et la valeur, donc peutVersion:123
-être devrait être interprété comme une continuation du champ précédent et non un champ de version distinct (en raison de l'absence d'un espace après le colon).dpkg-parsechangelog
va ressembler àVersion: 0.6.11-2
Si vous voulez que quelque chose fasse une analyse plus robuste dudebian/control
format, vous pouvez utiliserpython-debian
oulibparse-debcontrol-perl
.dpkg-parsechangelog
fonctionne, et la réponse précédente canalisant la sortie via sed / grep devrait être entièrement robuste. Si vous souhaitez connaître les détails précis du format dedpkg-parsechangelog
sortie et de la plupart des autres fichiers de contrôle de style Debian, consultez la RFC 822 . Il n'est jamais acceptable qu'une version de paquet deb contienne une nouvelle ligne, un espace ou tout autre caractère spécial ou de contrôle (voirman deb-version
), donc laVersion: blah
ligne " " dans la sortie sera toujours présente, et ce sera toujours une seule ligne sur son posséder.Cependant,
dpkg-parsechangelog
c'est un programme très lourd à exécuter juste pour obtenir le numéro de version actuel à partir d'un journal des modifications. Il doit exécuter Perl et charger un nombre impressionnant de bibliothèques afin de vous donner un résultat, dont la plupart ne seront pas utilisés. Sur des plates-formes plus lentes, ou avec des supports de stockage de fichiers lents, ou lorsque vous devez faire cette version en analysant beaucoup de fois, cela se révélera très douloureusement lent. À la place, utilisez simplement ce qui se trouve à l'intérieur du premier ensemble de parenthèses sur la première ligne:Cela vous permettra d'obtenir la version de package actuelle correcte avec tout
changelog
fichier valide utilisant le format standard (et lesdebian/changelog
formats non standard ne sont jamais utilisés à des fins générales pratiques).la source
comme je l'ai vu, la version du package consiste en une partie d'en-tête du fichier journal des modifications. donc vous pouvez le faire comme
J'ai essayé cette commande pour les packages installés, par exemple
&
la source