limpeza de saída de um script para que ele seja decrescente, forneça nomes de pacotes e exista de forma limpa

0

Eu arquivei Existe uma maneira de encontrar patches que precisam ser testados em pacotes que você tem? e eu recebi um script que funciona -

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u); do bts select source:${source} tag:patch; done

agora enquanto o comando funciona - a saída é confusa, essas poucas linhas são a saída -

[$] for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u); do bts select source:${source} tag:patch; done          

781691
725728
805989
677570
772688
823072

Agora seria bom se houvesse uma maneira de -

a. Dá a listagem de maneira decrescente, para que os patches mais recentes / emocionantes possam ser conhecidos / entendidos / experimentados primeiro do que os anteriores.

b. Deve listar o pacote ao qual pertence -

por exemplo 823072 pertence a acpi-support que tem um patch ou 805989 que é accountservice. Ter nomes de pacotes seria muito melhor.

c. Por fim, toda vez que a listagem é concluída (ou é?), Ela deve sair para o prompt de comando. Se, por alguma razão, a conexão de rede estiver inoperante ou se não encontrar nenhum erro, ela deverá sair com uma declaração indicando qualquer motivo.

É possível? Eu estou em zsh e uso oh-my-zsh então tudo é operado de ~ / .oh-my-zsh

Atualizar - fiz algo semelhante para listar arquivos locais, mas não sei como isso pode ser alcançado -

┌─[shirish@debian] - [~] - [6266]
└─[$] alias ll

ll='ls -lt --color=auto --time-style=long-iso'

Atualização 2 - tentei apenas sort por enquanto, não tenho ideia sobre sed

Eu vi o link , bem como

link

e especificamente viu -

The following sort command sorts lines in test file in reverse order and removes duplicate lines from sorted output.

$ sort -r -u test 5 4 2 1

Eu tentei usar o mesmo no script compartilhado, mas ele deu uma saída completamente diferente -

┌─[shirish@debian] - [~] - [6273]
└─[$] for source in $(dpkg-query --show -f '${source:Package}\n' | sort -r -u); do bts select source:${source} tag:patch; done       
538069
831900
779566
622933
691638
776663
419233

AFAI entendeu, o tipo foi usado para garantir que os números dos bugs não se repetem e são únicos (significa que a listagem é apenas uma vez), não sei exatamente porque o inverso não está funcionando quando deveria funcionar como o exemplo compartilhado . Talvez algo a ver com zsh ou não estou escrevendo corretamente :(.

Olhando para o sed enquanto isso, para ver se consigo entender alguma coisa.

Atualização 3 - isso não parece funcionar em zsh por algum motivo, usando apenas os bits de atm -

┌─[shirish@debian] - [~] - [6312]
└─[$] cat find-interesting-patches.sh

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u) do bts select source:${source} tag:patch | sed "s/^/${source} /g" done

e -

┌─[shirish@debian] - [~] - [6313]
└─[$] ll -h find-interesting-patches.sh

-rwxr-xr-x 1 shirish shirish 141 2016-11-23 23:56 find-interesting-patches.sh

então permissões de execução estão lá

Tentando executá-lo, recebo -

┌─[shirish@debian] - [~] - [6315]
└─[$] ./find-interesting-patches.sh

./find-interesting-patches.sh: 1: ./find-interesting-patches.sh: Syntax error: "|" unexpected

alguma ideia do que poderia estar errado aqui?

    
por shirish 23.11.2016 / 11:05

1 resposta

2

Começando com

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u); do bts select source:${source} tag:patch; done

classificar a saída envolve outro uso de sort , para classificar a saída geral numericamente na ordem inversa:

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u); do bts select source:${source} tag:patch; done \
| sort -n -r

Para exibir o nome do pacote (fonte) junto com o número do bug, a opção mais simples é adicionar ${source} (o pacote fonte) no lugar certo, processando a saída bts toda vez que for executado:

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u)
do bts select source:${source} tag:patch | sed "s/^/${source} /g"
done

Isto produz linhas do formulário

linux 845422

por isso, precisamos alterar o% finalsort para classificar no segundo campo:

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u)
do bts select source:${source} tag:patch | sed "s/^/${source} /g"
done | sort -k2,2n -r

Em uma única linha que é

for source in $(dpkg-query --show -f '${source:Package}\n' | sort -u); do bts select source:${source} tag:patch | sed "s/^/${source} /g"; done | sort -k2,2n -r
    
por 23.11.2016 / 18:36