ソースパッケージのdebian/changelogファイル(またはdebian/control?)を解析してパッケージのバージョン番号を取得する最も堅牢な方法は何ですか?何かのようなもの:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
スクリプトで操作できるように、バージョン番号(およびバージョン番号のみ)を抽出します。
私はdpkg-*この目的のためのユーティリティを見つけることを期待していましたが、まだ見つけていません。
ソースパッケージのdebian/changelogファイル(またはdebian/control?)を解析してパッケージのバージョン番号を取得する最も堅牢な方法は何ですか?何かのようなもの:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
スクリプトで操作できるように、バージョン番号(およびバージョン番号のみ)を抽出します。
私はdpkg-*この目的のためのユーティリティを見つけることを期待していましたが、まだ見つけていません。
回答:
バージョン1.17.0以降を使用している場合は、次を使用できます。
dpkg-parsechangelog --show-field Version
その後、出力をさらに処理する必要はありません。このバージョンは現在(2014年2月)Debianテストで利用可能です。
これを行うには多くの方法があります。
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。
dpkg-parsechangelog動作し、sed / grepを介して出力をパイピングする以前の回答は完全に堅牢である必要があります。dpkg-parsechangelog出力形式の詳細、および他のほとんどのdebianスタイルの制御ファイルを知りたい場合は、RFC 822を参照してください。debパッケージバージョンに改行、スペース、またはその他の特殊文字または制御文字(を参照man deb-version)を含めることは決して許されないためVersion: blah、出力の「」行は常に存在し、常に1行になります。自分の。
ただし、変更ログから現在のバージョン番号を取得するためだけに実行dpkg-parsechangelogする非常に重いプログラムです。結果を得るために、Perlを実行し、非常に多数のライブラリをロードする必要がありますが、ほとんどは使用しません。遅いプラットフォーム、遅いファイルストレージメディア、またはこのバージョンを何度も解析する必要がある場合は、非常に痛いほど遅くなります。代わりに、最初の行の括弧の最初のセット内にあるものを使用します。
head -1 debian/changelog | awk -F'[()]' '{print $2}'
これchangelogにより、標準形式を使用した有効なファイルで正しい現在のパッケージバージョンが取得されます(非標準debian/changelog形式は、すべての実用的な一般的な目的のために、決して使用されません)。
私が見たように、パッケージのバージョンはchangelogファイルのヘッダー部分にあります。あなたはそれを好きなようにできます
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:~$