मैं डेबियन / चैंज से पैकेज संस्करण कैसे निकालूं?


11

पैकेज के संस्करण की संख्या प्राप्त करने के लिए स्रोत पैकेज की debian/changelogफ़ाइल (या debian/control?) को पार्स करने का सबसे मजबूत तरीका क्या है ? कुछ इस तरह:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

मैं संस्करण संख्या (और केवल संस्करण संख्या) निकालना चाहता हूं ताकि मैं इसे एक स्क्रिप्ट में हेरफेर कर सकूं।

मैं dpkg-*इस उद्देश्य के लिए एक उपयोगिता खोजने की उम्मीद कर रहा था , लेकिन मुझे अभी तक एक नहीं मिला है।

जवाबों:


18

यदि आपके पास संस्करण 1.17.0 या बाद का है, तो आप उपयोग कर सकते हैं

dpkg-parsechangelog --show-field Version

इसके बाद आउटपुट को संसाधित करने की आवश्यकता नहीं है। यह संस्करण वर्तमान में (फरवरी 2014) डेबियन टेस्टिंग में उपलब्ध है।


1
@RichardHansen: इस बारे में क्षमा करें, यह पता चला है कि ध्वज डेबियन स्टेबल में मौजूद संस्करण में उपलब्ध नहीं है।
मार्टिन गिस्लर

उबंटू 12.04 के लिए भी। यह हालांकि Ubuntu 14.04 में मौजूद है।
स्टेफान

7

ऐसा करने के कई तरीके हैं।

dpkg-parsechangelog | sed -n 's/^Version: //p'

या वैकल्पिक रूप से:

dpkg-parsechangelog | grep Version: | cut -d' ' -f2-


मैं कुछ अधिक मजबूत होने की उम्मीद कर रहा था - deb-control(5)मैन पेज स्पष्ट रूप से प्रारूप का वर्णन नहीं करता है और मैं कोई भी धारणा नहीं बनाना चाहता। उदाहरण के लिए, यह स्पष्ट नहीं करता है कि फ़ील्ड एक पंक्ति पर शुरू होनी चाहिए ("फ़ील्ड केवल फ़ील्ड द्वारा सीमांकित हैं।")। यह भी कहता है कि एक क्षेत्र कई पंक्तियों को फैला सकता है, और यह टैग और मूल्य के बीच अंतर के बारे में कुछ नहीं कहता है, इसलिए शायद Version:123इसे पिछले क्षेत्र की निरंतरता के रूप में समझा जाना चाहिए और एक अलग संस्करण फ़ील्ड नहीं होना चाहिए (अभाव के कारण बृहदान्त्र के बाद एक स्थान)।
रिचर्ड हैनसेन

व्यवहार में, आउटपुट से dpkg-parsechangelogऐसा लग रहा है कि Version: 0.6.11-2यदि आप debian/controlप्रारूप के अधिक मजबूत पार्सिंग के लिए कुछ करना चाहते हैं , तो आप उपयोग कर सकते हैं python-debianया कर सकते हैं libparse-debcontrol-perl
andrewsomething

1

dpkg-parsechangelogकाम करता है, और पूर्व / जीआरईपी के माध्यम से आउटपुट पाइपिंग का जवाब पूरी तरह से मजबूत होना चाहिए। यदि आप dpkg-parsechangelogआउटपुट के प्रारूप , और अधिकांश अन्य डेबियन-शैली नियंत्रण फ़ाइलों के सटीक विवरण जानना चाहते हैं , तो RFC 822 देखें । किसी नए पैकेज, स्पेस, या किसी अन्य विशेष या नियंत्रण वर्ण (देखें man deb-version) को शामिल करने के लिए एक डिबेट पैकेज संस्करण के लिए यह कभी ठीक नहीं है , इसलिए Version: blahआउटपुट में " " लाइन हमेशा मौजूद रहेगी, और यह हमेशा एक सिंगल लाइन होगी। खुद।

हालांकि, एक चैंज से वर्तमान संस्करण संख्या प्राप्त करने के लिए बस चलाने के लिए dpkg-parsechangelogएक बहुत भारी कार्यक्रम है। आपको परिणाम देने के लिए पेरेल को चलाना होगा और प्रभावशाली रूप से बड़ी संख्या में पुस्तकालयों को लोड करना होगा, जिनमें से अधिकांश का आप उपयोग नहीं करेंगे। धीमे प्लेटफ़ॉर्म पर, या धीमे फ़ाइल संग्रहण मीडिया के साथ, या जब आपको इस संस्करण को बहुत बार पार्स करने की आवश्यकता होती है, तो यह काफी दर्दनाक रूप से धीमा साबित होगा। इसके बजाय, पहली पंक्ति में कोष्ठक के पहले सेट के अंदर जो कुछ भी है उसका उपयोग करें:

head -1 debian/changelog | awk -F'[()]' '{print $2}'

आपको changelogमानक प्रारूप का उपयोग करके किसी भी मान्य फ़ाइल के साथ सही वर्तमान पैकेज संस्करण मिलेगा (और debian/changelogसभी व्यावहारिक सामान्य उद्देश्यों के लिए गैर-मानक प्रारूप हैं, कभी उपयोग नहीं किया गया)।


-1

जैसा कि मैंने देखा है कि पैकेज वर्जन में चैंज फाइल का हेडर हिस्सा होता है। तो आप इसे पसंद कर सकते हैं

pkgver=$(dpkg-parsechangelog | head

मैंने इस कमांड को संस्थापित संकुल के लिए आज़माया है, उदाहरण के लिए

aptitude changelog shutter | head

और

jai@frank-Jai:~$ aptitude changelog shutter | head
Get: Changelog of shutter
shutter (0.89.0-0ubuntu1) quantal; urgency=low

  * New upstream release.
   - Adds an AppIndicator (LP: #805464).
  * debian/control: Recommend libgtk2-appindicator-perl

 -- Andrew Starr-Bochicchio <a.starr.b@gmail.com>  Sat, 11 Aug 2012 17:36:18 -0400

shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$ 

1
मैं संस्करण संख्या और केवल संस्करण संख्या चाहता हूं ताकि मैं इसे एक स्क्रिप्ट में हेरफेर कर सकूं।
रिचर्ड हैनसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.