シェルスクリプトのリポジトリでパッケージの最新バージョンを見つけるにはどうすればよいですか? 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スクリプトがありますか?
Apt-cacheポリシーの出力をフィードする次のawkスクリプトをお勧めします。
#!/usr/bin/awk -f
/^ [^ ]/ {
version = $1
}
/^ \*\*\* [^ ]/ {
version = $2
}
/^ [^ ]/ {
server = $2
if (server !~ /^\//) {
print version
exit
}
}
以下のコマンドは機能するようです:
LANG=C apt-cache policy nvidia-current | grep '^ [^ ]' |\
sort | awk '{print $1}' | head -1
LANG=C
は、出力が異なるロケール間で一貫していることを保証します。 grep
は、一連のスペースとそれに続く非スペース文字(バージョンなど)に一致します。 awk
は、最初の空白以外のブロックであるバージョンを表示します。次に、出力がソートされ、最新バージョンがhead
によって取得された一番上に表示されます。
あなたは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