web-dev-qa-db-ja.com

リポジトリでパッケージの最新バージョンを見つける方法は?

シェルスクリプトのリポジトリでパッケージの最新バージョンを見つけるにはどうすればよいですか? apt-cache-policyを使用すると、リポジトリからの最新バージョンではなく、インストール済みバージョンが「候補」として取得されます。

apt-cache policy nvidia-currentは以下を示します:

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

インストールされているバージョンは***でマークされているため、無視する必要があります。おそらく、使用できるawkスクリプトがありますか?

3
Lekensteyn

Apt-cacheポリシーの出力をフィードする次のawkスクリプトをお勧めします。

#!/usr/bin/awk -f

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

以下のコマンドは機能するようです:

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

LANG=Cは、出力が異なるロケール間で一貫していることを保証します。 grepは、一連のスペースとそれに続く非スペース文字(バージョンなど)に一致します。 awkは、最初の空白以外のブロックであるバージョンを表示します。次に、出力がソートされ、最新バージョンがheadによって取得された一番上に表示されます。

1
Lekensteyn

あなたは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

またはワンライナー:

rmadison nvidia-current -a AMD64 | grep natty | cut -d "|" -f 2
1
andrewsomething