очищает вывод скрипта по убыванию, дает имена пакетов и чисто существует

Я подал Есть ли способ найти исправления, требующие тестирования, из имеющихся у вас пакетов? и мне дали скрипт, который работает -

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

сейчас, пока работает команда - вывод сбивает с толку, эти несколько строк представляют собой вывод -

[$] 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

Было бы неплохо, если бы существовал способ -

a. Предоставляет список в порядке убывания, так что новые / интересные патчи могут быть известны / поняты / опробованы первыми, чем более ранние.

б. Если указать пакет, к которому он принадлежит -

например, 823072 принадлежит acpi-support, у которого есть патч, или 805989, который является accountservice. Имена пакетов были бы намного лучше.

c. Наконец, каждый раз после завершения листинга (или нет?) Он должен выходить в командную строку. Если по какой-то причине сетевое соединение прервано или не обнаружено никаких ошибок, оно должно выйти из строя, указав любую причину.

Возможно ли это? Я использую zsh и использую oh-my-zsh, поэтому все управляется из ~ / .oh-my-zsh

Обновление - я сделал нечто подобное для перечисления локальных файлов, но не знаю, как это можно сделать -

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

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

Обновление 2 - пока я пробовал просто sort , понятия не имею о sed

Я видел http://www.thegeekstuff.com/2013/04/sort- files / , а также

http: //www.tecmint.com / sort-command-linux /

и, в частности, увидел -

Следующая команда sort сортирует строки в тестовом файле в обратном порядке и удаляет повторяющиеся строки из отсортированного вывода.

$ sort -r -u test 5 4 2 1

Я пытался использовать то же самое в совместно используемом скрипте, но он дает совсем другой результат -

┌─[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 это понятно, сортировка использовалась, чтобы убедиться, что номера ошибок не повторяются и уникальны (означает, что листинг только один раз), на самом деле не знаю, почему обратное не работает, когда оно должно работать, как в приведенном примере. Может быть, что-то связано с zsh, или я пишу его неправильно :(.

Тем временем ищу sed, чтобы узнать, могу ли я что-то понять.

Обновление 3 - похоже, это не работает в zsh для некоторых причина, просто используя биты sed 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

и -

┌─[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

, так что разрешения на выполнение есть

Пытаясь запустить его, я получаю -

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

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

какие-нибудь идеи, что здесь может быть не так?

0
13.04.2017, 15:36
1 ответ

Начиная с

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

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

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

Чтобы отобразить имя (исходного) пакета вместе с номером ошибки, самый простой вариант - добавить $ {source} (исходный пакет) в нужное место, обрабатывая bts ' s выводит каждый раз при запуске:

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

Это выводит строки формы

linux 845422

, поэтому нам нужно изменить окончательную sort для сортировки во втором поле:

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

В единственной строке, которая

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
]
2
28.01.2020, 02:34

Теги

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