Как найти самую последнюю версию пакета в репозиториях?

Вот быстрый и грязный системный монитор, который я взломал из python:

Он использует «Индикатор системного монитора» (здесь), чтобы вызвать сценарий, который я написал. Чтобы использовать его:

установите indicator-sysmonitor. Для этого запустите следующую команду:
sudo apt-add-repository ppa:alexeftimie/ppa && sudo apt-get update && sudo apt-get install indicator-sysmonitor
скопируйте сценарий ниже в файл с именем sysmonitor, чтобы исполняемый файл сценария (chmod +x path-to-file) щелкнул по индикатору и выберите «Настройки». выберите «использовать эту команду» и укажите путь к файлу sysmonitor.

вот код:

#!/usr/bin/python

import re
import sys
import time
import psutil





#Functions:_    __    __    __    __    __    __    __    __    __    __    __
#__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \_



#interface |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
net_re = re.compile(r"\s*\S+:\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+")

def getInOut():
  """
  Get a readout of bytes in and out from /proc/net/dev.
  """

  netfile = "/proc/net/dev"

  try: f = open(netfile)
  except:
    sys.stderr.write("ERROR: can't open "+netfile+".\n")
    sys.exit(2)

  f.readline()    #Burn the top header line.
  f.readline()    #Burn the second header line.

  inb = 0
  outb = 0
  for line in f:
    m = net_re.match(line)
    inb += int(m.group(1))
    outb += int(m.group(2))
  f.close()

  return (inb,outb)



def sampleNet():
  """
  Get a sample of I/O from the network interfaces.
  """
  return makeSample(getInOut)


def makeSample(function):
  inlist = list()
  outlist = list()

  (inbytes, outbytes) = function()
  inlist.append(inbytes)
  outlist.append(outbytes)
  time.sleep(1)

  (inbytes, outbytes) = function()
  inlist.append(inbytes)
  outlist.append(outbytes)

  return (inlist[1] - inlist[0], outlist[1] - outlist[0])



def diskstatWrapper():
  """
  Wrapper for the diskstats_parse function that returns just the in and out.
  """
  ds = diskstats_parse("sda")
  return (ds["sda"]["writes"], ds["sda"]["reads"])



def sampleDisk():
  """
  Get a sample of I/O from the disk.
  """
  return makeSample(diskstatWrapper)





def diskstats_parse(dev=None):
    """
    I found this on stackoverflow.
    (http://stackoverflow.com/questions/3329165/python-library-for-monitoring-proc-diskstats)
    """
    file_path = '/proc/diskstats'
    result = {}

    # ref: http://lxr.osuosl.org/source/Documentation/iostats.txt
    columns_disk = ['m', 'mm', 'dev', 'reads', 'rd_mrg', 'rd_sectors',
                    'ms_reading', 'writes', 'wr_mrg', 'wr_sectors',
                    'ms_writing', 'cur_ios', 'ms_doing_io', 'ms_weighted']

    columns_partition = ['m', 'mm', 'dev', 'reads', 'rd_sectors', 'writes', 'wr_sectors']

    lines = open(file_path, 'r').readlines()
    for line in lines:
        if line == '': continue
        split = line.split()
        if len(split) != len(columns_disk) and len(split) != len(columns_partition):
            # No match
            continue

        data = dict(zip(columns_disk, split))
        if dev != None and dev != data['dev']:
            continue
        for key in data:
            if key != 'dev':
                data[key] = int(data[key])
        result[data['dev']] = data

    return result





#MAIN:    __    __    __    __    __    __    __    __    __    __    __    __
#__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \_




(indiff, outdiff) = sampleNet()
outstr = ""
outstr += "cpu: "+str(int(psutil.cpu_percent()))+"%\t"
outstr += "net: "+str(indiff/1000)+"|"+str(outdiff/1000)+" K/s\t"

(diskin, diskout) = sampleDisk()
outstr += "disk: "
if(diskin):
  outstr += "+"
else:
  outstr += "o"
outstr += "|"
if(diskout):
  outstr += "+"
else:
  outstr += "o"

print outstr

EDIT: если вы хотите использовать память (в качестве отчета «сверху»), добавьте строки

memperc = int(100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM))
outstr += "mem: "+str(memperc)+"%\t"

If у вас есть версия 2.0 psutil, тогда вы можете получить использование памяти, как сообщается системным монитором GNOME, со следующей строкой:

memperc = int(100*float(psutil.used_phymem()-psutil.cached_phymem())/float(psutil.TOTAL_PHYMEM))

Если у вас мало места, и вы предпочитаете иметь единицы для сети (b, k, M) вы также можете использовать

def withUnit(v):
    if v<1024:
      return "%03d" % v+"b";
    if v<1024**2:
      s= ("%f" % (float(v)/1024))[:3];
      if s[-1]=='.':
         s=s[:-1]
      return s +"k";

    return ("%f" % (float(v)/(1024**2)))[:3] +"M";


(indiff, outdiff) = sampleNet()
outstr = ""
outstr += "c"+ "%02d" % int(psutil.cpu_percent())+" "
outstr += "m"+ "%02d" % int((100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM)))+" "

outstr += "d"+withUnit(indiff)+" u"+withUnit(outdiff)
3
задан 9 August 2011 в 20:57

21 ответ

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f

/^     [^ ]/ {
  version = $1
}
/^ \*\*\* [^ ]/ {
  version = $2
}
/^        [^ ]/ {
  server = $2
  if (server !~ /^\//) {
    print version
    exit
  }
}
1
ответ дан 25 May 2018 в 19:25
  • 1
    Это работает, большое спасибо. Гарантировано ли, что вывод apt-cache policy отсортирован по версии? – Lekensteyn 10 August 2011 в 12:56
  • 2
    Я думаю, что рекомендуемая версия находится в верхней части вывода. – Lekensteyn 10 August 2011 в 13:31
  • 3
    @Lekensteyn: Я так и предполагал, никогда не видел иначе – enzotib 10 August 2011 в 13:41

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 25 July 2018 в 21:29

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 31 July 2018 в 13:33

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 2 August 2018 в 03:07

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 4 August 2018 в 18:58

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 6 August 2018 в 03:19

Я предлагаю следующий скрипт awk, к которому вывод политики кэша фида:

#!/usr/bin/awk -f /^ [^ ]/ { version = $1 } /^ \*\*\* [^ ]/ { version = $2 } /^ [^ ]/ { server = $2 if (server !~ /^\//) { print version exit } }
1
ответ дан 7 August 2018 в 21:01

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 25 May 2018 в 19:25
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 25 May 2018 в 19:25
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 25 July 2018 в 21:29
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 25 July 2018 в 21:29
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 31 July 2018 в 13:33
  • 1
    Примечание: я нахожу эту грязную и я не уверен, если сортировка подходит для всех версий. Чище альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 31 July 2018 в 13:33
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 2 August 2018 в 03:07
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 2 August 2018 в 03:07
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 4 August 2018 в 18:58
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваш отзыв, что будет правильным функцию сортировки? Есть dpkg --compare-versions, но он не может быть использован для сортировки, только рекурсивно проверить, какая версия является более свежие. Что же касается местных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должно быть установлено из .deb файл напрямую, но это конечно ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 4 August 2018 в 18:58
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 6 August 2018 в 03:19
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 6 August 2018 в 03:19
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Кажется, что работает следующая команда:

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

LANG=C гарантирует, что выход согласован в разных локалях. grep соответствует набору пробелов, за которым следует непространственный символ (например, версия). awk отображает версию, которая является первым блоком без пробелов. Затем результат сортируется, и самая последняя версия должна быть доступна сверху, которая берется с помощью head.

1
ответ дан 7 August 2018 в 21:01
  • 1
    Примечание. Я считаю это грязным, и я не уверен, подходит ли сортировка для всех версий. Чистые альтернативы приветствуются. – Lekensteyn 9 August 2011 в 21:09
  • 2
    Я вижу две проблемы: вы намеренно исключаете установленную версию, но это может быть самое последнее, что вы ищете. Во-вторых, сортировка сортировки по умолчанию не обязательно является правильной строкой строки. Наконец, вы не проверяете, появилась ли версия из некоторого репо или локальная установка пакета. – enzotib 10 August 2011 в 01:04
  • 3
    Спасибо за ваши отзывы, какая бы правильная функция сортировки? Существует dpkg --compare-versions, но его нельзя использовать для сортировки, только рекурсивно проверяя, какая версия считается более поздней. Что касается локальных пакетов, это не будет проблемой в моем случае, так как nvidia-current не должен быть установлен непосредственно из файла .deb, но это ничего не стоит. – Lekensteyn 10 August 2011 в 12:51

Вы можете посмотреть 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
ответ дан 7 August 2018 в 21:01
  • 1
    К сожалению, я не могу попросить пользователей установить другой пакет. Кстати, rmadison выполняет HTTP-запрос для определения этих данных. Есть ли способ запросить кеш, чтобы он мог работать в автономном режиме? – Lekensteyn 9 August 2011 в 23:54

Другие вопросы по тегам:

Похожие вопросы: