Я пытаюсь получить описание пакета своих установленных пакетов.
Это было бы похоже на это:
sudo apt list --installed | sed 's/\/.*//' | apt-cache search {} \;
Проблема состоит в том, чтобы отправить каждую строку от sed до способного кэша. Какое-либо предложение?
{} \;
синтаксис, который Вы предположили, характерен для find
управляйте и не будет работать в этом контексте. Вы могли использовать xargs
напр.
apt list --installed | sed 's/\/.*//' | xargs -n1 apt-cache search
На самом деле xargs
имеет его собственное {}
- как синтаксис, который Вы могли использовать здесь, т.е.
. . . | xargs -n1 -I{} apt-cache search {}
хотя это избыточно в этом случае (для случаев полезно, где Вы хотите заменить переданным по каналу значением в точке кроме конца команды).
Однако apt-cache search
команда почти наверняка не, что Вы хотите здесь - она будет искать весь каталог (онлайн) пакеты, которые соответствуют каждому из результатов apt list --installed
. Даже если Вы ограничиваете объем поискового использования --names-only
Вы все еще получите много ложных положительных сторон (т.е. соответствия подстроки между пакетами, которые установлены и пакеты, которые не ЯВЛЯЮТСЯ). Это также будет ужасно неэффективно.
Для этой конкретной задачи я пропустил бы apt
в целом и использование низшего уровня dpkg-query
команда напр.
dpkg-query -W -f='${binary:Package}: ${binary:Summary}\n'
который будет намного более эффективным (только пересекают список пакета однажды), и будет строго ограничен локальным каталогом пакета.
Если Вы хотите ограничить вывод пакетами, которые в настоящее время устанавливаются, добавляют db:Status-Abbrev
поле и фильтр на этом, например.
dpkg-query -W -f='${db:Status-Abbrev}\t${binary:Package} - ${binary:Summary}\n' |
awk '/^ii/'
или
dpkg-query -W -f='${db:Status-Abbrev}\t${binary:Package} - ${binary:Summary}\n' |
awk -F'\t' '/^ii/ {print $2}'