[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Como comparar as versões de dois pacotes
From: |
Eliphas Levy Theodoro |
Subject: |
Re: [shell-script] Como comparar as versões de dois pacotes |
Date: |
Mon, 20 Feb 2006 10:06:15 -0300 |
User-agent: |
Thunderbird 1.5 (Windows/20051201) |
Era uma vez um empacotador rpm, que estava com esse problema.
Bom, a solução que eu adotei foi pegar os campos de trás pra frente com
o sed, já que o final do arquivo é sempre consistente:
$ cat destrinchanome.sh
#!/bin/bash
while read pacote; do
novopacote=`echo "$pacote" | sed
's/\(.*\)-\(.*\)-\(.*\)\.\(.*\)\.rpm/\1@\2@\3@\4/'`
OLDIFS="$IFS"
IFS="@"
set - $novopacote
if [ "$#" -ne "4" ]; then
echo $@
echo "Ups, pacote $pacote nao destrinchado"
continue
fi
nome=$1;versao=$2;release=$3;arch=$4
# faz algo com o pacote
echo $nome $versao $release $arch
done < <(ls *rpm)
$ ./destrinchanome.sh
bacula 1.38.2 1 src
cups 1.1.23 15.3 src
dhcp 3.0.2 26.FC4 i386
gocr 0.40 1 i386
hpijs 0.9.5 1.1 i386
hplip 0.9.5 1.1 i386
ntop 3.2 0 src
pine 4.63 1el src
qmail-toaster 1.03 1.2.10 src
rac 1.3 3 i386
Quanto à comparação de versões, você pode usar o "sort -n" passando
todas as versões.
Se tiver rc1, rc2, etc... aí você tem que rever a lógica; se é mesmo RPM
que você tá mexendo, sugiro também ver o "Epoch" e outras tags.
Depois de um tempo, surgiu uma opção (ou um programa separado? não
lembro) que fazia essa comparação de versões pra mim e eu não precisei
mais me preocupar com isso. Acho que é uma das funções escondidinhas do rpm.
Bom, isso já deve botar o seu script no caminho certo ':)
--
Eliphas
Hugo Doria escreveu:
Eu tenho vários pacotes aqui no formato
nome-versão-arquitetura-release.extensao e preciso comparar as versões entre
pacotes com mesmo nome e realizar uma açao apenas com o pacote mais recente.
A principio eu pensei em fazer algo assim para testar a versão
if [ versao-1 -gt versao-2 ]; then
comandos;
fi
Para pegar a versão dos pacotes eu usei dentro de um for: echo $i | cut -d- -f2
Mas isso não deu muito certo por dois motivos:
1) Alguns pacotes possuem strings na versão. Por exemplo: nome-1.3rc2-tal-tal.ext
2) Nem sempre o segundo campo é a versão. Em alguns pacotes o segundo campo é
outra string. Exemplo: nome-devel-versão-tal-tal.ext