Как я нахожу новую версию пакета в репозиториях в сценарии оболочки? Если я использую 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 сценарий, который мог использоваться?
Я предлагаю следующий 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