Was ist die robusteste Methode, um die debian/changelog
Datei eines Quellpakets (oder debian/control
?) Zu analysieren , um die Versionsnummer des Pakets zu erhalten? Etwas wie:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Ich möchte die Versionsnummer (und nur die Versionsnummer) extrahieren , damit ich sie in einem Skript bearbeiten kann.
Ich hatte erwartet, ein dpkg-*
Dienstprogramm für diesen Zweck zu finden, aber ich habe noch kein gefunden.
packaging
deb
source-packages
Richard Hansen
quelle
quelle
Es gibt zahlreiche Möglichkeiten, dies zu tun.
dpkg-parsechangelog | sed -n 's/^Version: //p'
oder alternativ:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
quelle
deb-control(5)
Manpage beschreibt das Format nicht klar und ich möchte keine Annahmen treffen. Beispielsweise wird nicht klargestellt, dass Felder in einer Zeile beginnen müssen ("Felder werden nur durch Feld-Tags begrenzt."). Es heißt auch, dass ein Feld mehrere Zeilen umfassen kann und nichts über den Abstand zwischen dem Tag und dem Wert aussagt. DaherVersion:123
sollte es möglicherweise als Fortsetzung des vorherigen Felds und nicht als separates Versionsfeld interpretiert werden (aufgrund des Fehlens eines Leerzeichens nach dem Doppelpunkt).dpkg-parsechangelog
sieht die Ausgabe von folgendermaßen aus:Version: 0.6.11-2
Wenn Sie eine robustere Analyse desdebian/control
Formats wünschen , können Siepython-debian
oder verwendenlibparse-debcontrol-perl
.dpkg-parsechangelog
funktioniert, und die frühere Antwort, die die Ausgabe durch sed / grep leitet, sollte absolut robust sein. Wenn Sie genaue Informationen zumdpkg-parsechangelog
Ausgabeformat und zu den meisten anderen Steuerdateien im Debian-Stil erhalten möchten, lesen Sie RFC 822 . Es ist niemals in Ordnung, dass eine Deb-Paketversion eine neue Zeile, ein Leerzeichen oder andere Sonder- oder Steuerzeichen enthält (sieheman deb-version
), sodass dieVersion: blah
Zeile " " in der Ausgabe immer vorhanden ist und immer eine einzelne Zeile in der Ausgabe ist besitzen.Es
dpkg-parsechangelog
ist jedoch ein sehr umfangreiches Programm, das ausgeführt werden muss, um die aktuelle Versionsnummer aus einem Änderungsprotokoll abzurufen. Es muss Perl ausführen und eine beeindruckend große Anzahl von Bibliotheken laden, um ein Ergebnis zu erzielen, von dem Sie die meisten nicht verwenden. Auf langsameren Plattformen oder mit langsamen Dateispeichermedien oder wenn Sie diese Version häufig analysieren müssen, wird sie sich als sehr langsam erweisen. Verwenden Sie stattdessen einfach alles, was in den ersten Klammern in der ersten Zeile steht:Dadurch erhalten Sie die richtige aktuelle Paketversion mit jeder gültigen
changelog
Datei im Standardformat (und nicht standardmäßigedebian/changelog
Formate werden für alle praktischen allgemeinen Zwecke niemals verwendet).quelle
Wie ich gesehen habe, besteht die Paketversion im Header-Teil der Changelog-Datei. so kannst du es gerne machen
Ich habe diesen Befehl zum Beispiel für installierte Pakete ausprobiert
&
quelle