Apa cara paling ampuh untuk mem-parsing debian/changelog
file paket sumber (atau debian/control
?) Untuk mendapatkan nomor versi paket? Sesuatu seperti:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Saya ingin mengekstrak nomor versi (dan hanya nomor versi) sehingga saya dapat memanipulasinya dalam sebuah skrip.
Saya mengharapkan untuk menemukan dpkg-*
utilitas untuk tujuan ini, tetapi saya belum menemukannya.
packaging
deb
source-packages
Richard Hansen
sumber
sumber
Ada banyak cara untuk melakukan ini.
dpkg-parsechangelog | sed -n 's/^Version: //p'
atau sebagai alternatif:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
sumber
deb-control(5)
halaman manual tidak dengan jelas menggambarkan format dan saya tidak ingin membuat asumsi. Misalnya, tidak menjelaskan bahwa bidang harus dimulai pada suatu baris ("Bidang hanya dibatasi oleh tag bidang."). Ia juga mengatakan bahwa suatu bidang dapat menjangkau beberapa baris, dan itu tidak mengatakan apa-apa tentang penspasian antara tag dan nilainya, jadi mungkinVersion:123
harus ditafsirkan sebagai kelanjutan dari bidang sebelumnya dan bukan bidang Versi yang terpisah (karena kurangnya dari ruang setelah usus besar).dpkg-parsechangelog
akan terlihat sepertiVersion: 0.6.11-2
Jika Anda menginginkan sesuatu untuk melakukan parsingdebian/control
format yang lebih kuat , Anda bisa menggunakanpython-debian
ataulibparse-debcontrol-perl
.dpkg-parsechangelog
berfungsi, dan jawaban sebelumnya menyalurkan output melalui sed / grep harus sepenuhnya kuat. Jika Anda ingin mengetahui detail yang tepat dari formatdpkg-parsechangelog
output, dan sebagian besar file kontrol gaya debian lainnya, lihat RFC 822 . Tidak pernah ok untuk versi paket deb mengandung baris baru, spasi, atau karakter khusus atau kontrol lainnya (lihatman deb-version
), jadi baris "Version: blah
" dalam output akan selalu ada, dan akan selalu ada satu baris pada barisnya sendiri.Namun,
dpkg-parsechangelog
ini adalah program yang sangat berat untuk dijalankan hanya untuk mendapatkan nomor versi saat ini dari changelog. Itu harus menjalankan Perl dan memuat sejumlah besar perpustakaan yang mengesankan untuk memberi Anda hasil, yang sebagian besar tidak akan Anda gunakan. Pada platform yang lebih lambat, atau dengan media penyimpanan file yang lambat, atau ketika Anda perlu melakukan parsing versi ini berkali-kali, itu akan terbukti sangat lambat. Sebagai gantinya, cukup gunakan apa pun yang ada di dalam set kurung pertama di baris pertama:Itu akan memberi Anda versi paket saat ini yang benar dengan
changelog
file yang valid menggunakan format standar (dandebian/changelog
format tidak standar , untuk semua keperluan umum praktis, tidak pernah digunakan).sumber
seperti yang saya lihat versi paket terdiri dari bagian header dari file changelog. jadi kamu bisa melakukannya seperti
Saya telah mencoba perintah ini untuk paket yang diinstal, misalnya
&
sumber