Jaki jest najbardziej niezawodny sposób na parsowanie debian/changelog
pliku pakietu źródłowego (lub debian/control
?) W celu uzyskania numeru wersji pakietu? Coś jak:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Chcę wyodrębnić numer wersji (i tylko numer wersji), aby móc manipulować nim w skrypcie.
Spodziewałem się znaleźć dpkg-*
narzędzie do tego celu, ale jeszcze go nie znalazłem.
packaging
deb
source-packages
Richard Hansen
źródło
źródło
Można to zrobić na wiele sposobów.
dpkg-parsechangelog | sed -n 's/^Version: //p'
lub alternatywnie:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
źródło
deb-control(5)
strona podręcznika nie opisuje jasno formatu i nie chcę przyjmować żadnych założeń. Na przykład nie wyjaśnia, że pola muszą zaczynać się od linii („Pola są ograniczone tylko znacznikami pól”). Mówi także, że pole może obejmować wiele linii i nie mówi nic o odstępach między znacznikiem a wartością, więc możeVersion:123
być interpretowane jako kontynuacja poprzedniego pola, a nie oddzielne pole wersji (z powodu braku spacji po dwukropku).dpkg-parsechangelog
będą wyglądać następująco:Version: 0.6.11-2
Jeśli chcesz zrobić coś bardziej szczegółowego parsowaniadebian/control
formatu, możesz użyćpython-debian
lublibparse-debcontrol-perl
.dpkg-parsechangelog
działa, a wcześniejsza odpowiedź przesyłająca dane wyjściowe przez sed / grep powinna być całkowicie niezawodna. Jeśli chcesz poznać dokładne szczegóły formatudpkg-parsechangelog
wyjściowego i większości innych plików kontrolnych w stylu Debiana, zobacz RFC 822 . Nigdy nie jest poprawne, aby wersja pakietu deb zawierała znak nowej linii, spację lub jakiekolwiek inne znaki specjalne lub kontrolne (patrzman deb-version
), więcVersion: blah
wiersz „ ” na wyjściu zawsze będzie obecny i zawsze będzie pojedynczym wierszem posiadać.Jednak
dpkg-parsechangelog
jest to bardzo ciężkie do uruchomienia programu wystarczy, aby uzyskać aktualny numer wersji z changelogu. Musi uruchomić Perla i załadować imponująco dużą liczbę bibliotek, aby dać ci wynik, z którego większość nie będziesz używać. Na wolniejszych platformach lub z wolnymi nośnikami do przechowywania plików, lub gdy trzeba tę wersję analizować wiele razy, okaże się ona dość boleśnie powolna. Zamiast tego po prostu użyj tego, co jest w pierwszym zestawie nawiasów w pierwszym wierszu:Dzięki temu otrzymasz poprawną bieżącą wersję pakietu z dowolnym prawidłowym
changelog
plikiem w standardowym formacie (a niestandardowedebian/changelog
formaty, dla wszystkich praktycznych ogólnych celów, nigdy nie są używane).źródło
jak widziałem wersja pakietu składa się z części nagłówka pliku dziennika zmian. więc możesz to zrobić jak
Próbowałem na przykład tego polecenia dla zainstalowanych pakietów
I
źródło