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