Obtém o nome e a versão dos pacotes disponíveis para o arquivo de texto - nome e versão apenas na mesma linha, por pacote

6

Estou procurando um arquivo de texto com uma lista de alguns pacotes disponíveis e sua versão mais recente. Eu preciso ter o nome do pacote e sua versão mais recente na mesma linha.

TENTATIVA

Atualmente, posso obter um número de versão para um único pacote:

exemplo 1:

apt-cache show python-numpy | grep Version

Isso me dá uma linha de saída:

Version: 1:1.8.2-2

exemplo 2:

apt-cache show mysql-server | grep Version

Isso me dá uma linha de saída:

Version: 5.5.44-0+deb8ul

PROBLEMA :

Há mais de um pacote em que tenho interesse.

REQUISITO

O que estou procurando é o nome do pacote e a versão. Eu gostaria desse formato:

python-numpy 1.8.2-2
mysql-server 5.5.44-0
python-six 1.8.0-1
python-wheel 0.24.0-1
apache2 2.4.10-10
python-urllib3 1.9.1-3
python-setuptools 5.5.1-1

Se possível, gostaria que essas 6 linhas fossem gravadas em 'Output.txt'. Se não for possível obter todas essas linhas no mesmo arquivo, eu gostaria de obter apenas a primeira linha acima - python-numpy 1.8.2-2 - no arquivo de saída.

Pergunta:

Atualmente, posso obter o nome e a versão de cada um desses pacotes individualmente. No entanto, existe uma maneira de automatizar esse processo e obter tudo de uma vez?

EDITAR:

Os únicos pacotes que estou procurando são:

python-wheel
python-numpy
mysql-server
python-setuptools
python-six
apache2
python-urllib3
    
por W R 03.01.2016 / 20:15

2 respostas

8

Se você tem uma lista de pacotes (digamos, em um arquivo chamado input , um por linha), então você pode fazer:

while read package
do
    echo $package "$(apt-cache show $package | awk '/Version/{print }')"
done < input > Output.txt
    
por muru 03.01.2016 / 20:24
5

Após algumas disputas com a documentação de aptitude , incluindo esta referência de termo de pesquisa do aptitude a>, eu consegui chegar a este one-liner feio

aptitude -F '%p %V' --group-by=none --sort=name,~version versions \
  ?exact-name\({python-numpy,mysql-server,python-six,python-wheel,apache2,python-urllib3,python-setuptools}\) \
  | sort -uk1,1
  • -F '%p %V' formata a saída como nome do pacote e versão candidata
  • --sort=name,~version classifica por nome e versão do pacote descendente para que possamos usar sort -u para remover o mais recente
  • ?exact-name() impede que a pesquisa seja expandida para incluir itens como mysql-server-5.5 para mysql-server

Observe a expansão da chave feia para a lista de pacotes a verificar: não parece haver uma opção como -oAptitude::Some::Param=true para forçar ?exact-name() globalmente.

FWIW o utilitário apt-show-versions parece ter 90% do caminho com 10% do esforço: aqui estão os resultados para os pacotes que você mencionou no meu sistema 14.04.3:

$ aptitude -F '%p %V' --group-by=none --sort=name,~version versions \
  ?exact-name\({python-numpy,mysql-server,python-six,python-wheel,apache2,python-urllib3,python-setuptools}\) \
  | sort -uk1,1
apache2 2.4.7-1ubuntu4.8                                                        
mysql-server 5.5.46-0ubuntu0.14.04.2                                            
python-numpy 1:1.8.2-0ubuntu0.1                                                 
python-setuptools 3.3-1ubuntu2                                                  
python-six 1.5.2-1ubuntu1                                                       
python-urllib3 1.7.1-1ubuntu4                                                   
python-wheel 0.24.0-1~ubuntu1                                                   

enquanto

$ apt-show-versions python-numpy mysql-server python-six python-wheel apache2 python-urllib3 python-setuptools
apache2 not installed
mysql-server:all/trusty-security 5.5.46-0ubuntu0.14.04.2 uptodate
python-numpy:amd64/trusty-updates 1:1.8.2-0ubuntu0.1 uptodate
python-setuptools:all/trusty-updates 3.3-1ubuntu2 uptodate
python-six:all/trusty-updates 1.5.2-1ubuntu1 uptodate
python-urllib3:all/trusty-updates 1.7.1-1ubuntu4 uptodate
python-wheel:all/trusty-updates 0.24.0-1~ubuntu1 uptodate

A diferença mais óbvia é que aparentemente não inclui pacotes que não estão atualmente instalados.

    
por steeldriver 03.01.2016 / 23:32