Qual é a maneira mais robusta de analisar o debian/changelog
arquivo de um pacote de origem (ou debian/control
?) Para obter o número da versão do pacote? Algo como:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Quero extrair o número da versão (e apenas o número da versão) para que eu possa manipulá-lo em um script.
Eu esperava encontrar um dpkg-*
utilitário para esse fim, mas ainda não o encontrei.
packaging
deb
source-packages
Richard Hansen
fonte
fonte
Existem inúmeras maneiras de fazer isso.
dpkg-parsechangelog | sed -n 's/^Version: //p'
ou alternativamente:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
fonte
deb-control(5)
página de manual não descreve claramente o formato e eu não quero fazer nenhuma suposição. Por exemplo, não deixa claro que os campos devem iniciar em uma linha ("Os campos são delimitados apenas por tags de campo"). Ele também diz que um campo pode abranger várias linhas e não diz nada sobre espaçamento entre a tag e o valor; portanto, talvezVersion:123
deva ser interpretado como uma continuação do campo anterior e não como um campo separado da versão (devido à falta de um espaço após o cólon).dpkg-parsechangelog
será semelhante.Version: 0.6.11-2
Se você quiser algo para fazer uma análise mais robusta dodebian/control
formato, poderá usarpython-debian
oulibparse-debcontrol-perl
.dpkg-parsechangelog
funciona, e a resposta anterior, canalizando a saída através de sed / grep deve ser totalmente robusta. Se você quiser saber detalhes precisos do formato dadpkg-parsechangelog
saída e a maioria dos outros arquivos de controle no estilo debian, consulte RFC 822 . Nunca é aceitável que uma versão do pacote deb contenha uma nova linha, espaço ou qualquer outro caractere especial ou de controle (consulteman deb-version
"Version: blah
" ), portanto, a linha " " na saída estará sempre presente e sempre será uma única linha em seu próprio.No entanto,
dpkg-parsechangelog
é um programa muito pesado para ser executado apenas para obter o número da versão atual de um registro de alterações. Ele precisa executar o Perl e carregar um número impressionante de bibliotecas para fornecer um resultado, a maioria dos quais você não usará. Em plataformas mais lentas, ou com mídia de armazenamento lenta de arquivos, ou quando você precisar fazer esta versão analisando muitas vezes, será muito dolorosamente lento. Em vez disso, basta usar o que estiver dentro do primeiro conjunto de parênteses na primeira linha:Isso fornecerá a versão correta do pacote atual com qualquer
changelog
arquivo válido usando o formato padrão (edebian/changelog
formatos fora do padrão , para todos os efeitos práticos gerais, nunca são usados).fonte
como eu vi a versão do pacote consiste na parte do cabeçalho do arquivo changelog. então você pode fazer assim
Eu tentei este comando para pacotes instalados, por exemplo
&
fonte