Se você tiver a versão 1.17.0 ou posterior, use
dpkg-parsechangelog --show-field Version
Não há necessidade de processar a saída ainda mais. Esta versão está atualmente (fevereiro de 2014) disponível no Debian Testing.
Qual é a maneira mais robusta de analisar o arquivo debian/changelog
do pacote fonte (ou debian/control
?) para obter o número da versão do pacote? Algo como:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Eu quero extrair o número da versão (e somente o número da versão) para que eu possa manipulá-lo em um script.
Eu estava esperando encontrar um utilitário dpkg-*
para essa finalidade, mas ainda não encontrei nenhum.
Se você tiver a versão 1.17.0 ou posterior, use
dpkg-parsechangelog --show-field Version
Não há necessidade de processar a saída ainda mais. Esta versão está atualmente (fevereiro de 2014) disponível no Debian Testing.
Existem várias maneiras de fazer isso.
dpkg-parsechangelog | sed -n 's/^Version: //p'
ou alternativamente:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
dpkg-parsechangelog
funciona, e a resposta anterior, canalizar a saída por meio de sed / grep, deve ser totalmente robusta. Se você quiser saber detalhes precisos do formato de dpkg-parsechangelog
output, e a maioria dos outros arquivos de controle no estilo debian, veja RFC 822 . Nunca é permitido que uma versão do pacote deb contenha uma nova linha, espaço ou qualquer outro caractere especial ou controle (veja man deb-version
), então a linha " Version: blah
" na saída sempre estará presente, e sempre será seja uma única linha por conta própria.
No entanto, dpkg-parsechangelog
é um programa pesado muito para ser executado apenas para obter o número da versão atual de um changelog. Ele precisa executar o Perl e carregar um número impressionante de bibliotecas para fornecer um resultado, a maioria das quais você não usará. Em plataformas mais lentas, ou com mídia de armazenamento de arquivos lenta, ou quando você precisar fazer várias vezes essa análise de versão, ela será dolorosamente lenta. Em vez disso, use o que estiver dentro do primeiro conjunto de parênteses na primeira linha:
head -1 debian/changelog | awk -F'[()]' '{print }'
Isso fará com que você obtenha a versão correta do pacote atual com qualquer arquivo changelog
válido usando o formato padrão (e os formatos debian/changelog
não padrão são, para todos os propósitos gerais práticos, nunca usados).
como eu vi a versão do pacote consiste na parte do cabeçalho do arquivo changelog. então você pode fazer como
pkgver=$(dpkg-parsechangelog | head
Eu tentei este comando para pacotes instalados, por exemplo
aptitude changelog shutter | head
& amp;
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 <[email protected]> Sat, 11 Aug 2012 17:36:18 -0400
shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$
Tags packaging deb source-packages