Como encontrar a versão mais recente de um pacote nos repositórios?

3

Como encontro a versão mais recente de um pacote nos repositórios em um script de shell? Se eu usar apt-cache-policy , obtenho a versão instalada como "Candidate", não a mais recente dos repositórios.

apt-cache policy nvidia-current mostra:

nvidia-current:
  Installed: 280.13-0ppa~natty1
  Candidate: 280.13-0ppa~natty1
  Version table:
 *** 280.13-0ppa~natty1 0
        100 /var/lib/dpkg/status
     270.41.06-0ubuntu1 0
        500 http://archive.ubuntu.com/ubuntu/ natty/restricted amd64 Packages

Parece que a versão instalada está marcada com *** , de modo que um deve ser ignorado. Talvez haja um script awk que possa ser usado?

    
por Lekensteyn 09.08.2011 / 17:57

3 respostas

1

Eu sugiro o seguinte script awk, para o qual alimenta a saída da política do apt-cache:

#!/usr/bin/awk -f

/^     [^ ]/ {
  version = $1
}
/^ \*\*\* [^ ]/ {
  version = $2
}
/^        [^ ]/ {
  server = $2
  if (server !~ /^\//) {
    print version
    exit
  }
}
    
por enzotib 09.08.2011 / 22:12
1

O comando abaixo parece funcionar:

LANG=C apt-cache policy nvidia-current | grep '^     [^ ]' |\
    sort | awk '{print $1}' | head -1

LANG=C garante que a saída seja consistente em diferentes localidades. grep corresponde a um conjunto de espaços seguido por um caractere não espacial (por exemplo, a versão). awk exibe a versão que é o primeiro bloco que não é espaço em branco. Em seguida, a saída é classificada e a versão mais recente deve estar disponível na parte superior, que é obtida por head .

    
por Lekensteyn 09.08.2011 / 18:08
1

Você pode querer olhar para rmadison

#! /bin/bash

DEFAULT_DIST="$(ubuntu-distro-info --stable)"
PACKAGE="$1"
TARGET_DIST="$2"
ARCH="$(dpkg --print-architecture)"

if [ -z "$1" ]; then
  echo "Usage: $0 <PACKAGE> <DIST>"
  exit
fi

if [ -z "$TARGET_DIST" ]; then
  TARGET_DIST=$DEFAULT_DIST
  echo "Target dist not specified. Assuming $DEFAULT_DIST."
fi

VERSION="$(rmadison $PACKAGE -a $ARCH | grep $TARGET_DIST | cut -d "|" -f 2)"

echo $VERSION

Ou o one-liner:

rmadison nvidia-current -a amd64 | grep natty | cut -d "|" -f 2
    
por andrewsomething 09.08.2011 / 20:32