1

Я пишу небольшую программу, которая упаковывает файлы конфигурации как rpm, и помещает серию триггеров% для обработки / обновления пакетов, которые предоставляют копию / версию того же файла.

Я застрял, пытаясь отформатировать Yum обеспечивает вывод. Выход по умолчанию:

# yum provides */named.conf -q
32:bind-chroot-9.8.2-0.17.rc1.el6_4.6.i686 : A chroot runtime environment for the ISC BIND DNS server, named(8)
Repo        : base
Matched from:
Filename    : /var/named/chroot/etc/named.conf


sblim-cmpi-dns-test-1.0-1.el6.i686 : SBLIM WBEM-SMT Dns - Testcase Files
Repo        : base
Matched from:
Filename    : /usr/share/sblim-testsuite/named.conf

Но мне нужно только название пакета. Использование cut не кажется хорошей идеей. Разделитель будет - но есть несколько пакетов с - в середине имени пакета.

В идеале мне нужно, чтобы вывод был форматируемым, как для запросов rpm:

rpm -qa --queryformat "%{NAME}\n"
make
rubygem-multi_json
attr
ncurses-base
rubygem-rack-test
strace
rubygem-polyglot
gpg-pubkey
rubygem-journey
tzdata
...

2 ответа2

0

Я разработал уродливое решение этой проблемы, используя различные команды yum, sed, grep и cut:

PKLIST=`yum provides -q */$FILE | grep -v 'Repo\|Matched\|Filename' | sed "s/32://g" | cut -d':' -f1 | sed "s/ //g" | grep -e '^$' -v`
array=($PKLIST)
arr2=()
for i in "${array[@]}"
do
        x=`yum info -C $i | grep "Name        :" | sed "s/Name        : //g"`
        arr2+=($x)
done

Затем я удалил дубликаты из массива

arr3=$(echo "${arr2[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')

С моим текущим знанием bash, это лучшее, что я мог сделать.

0

Вы будете счастливее, если откажетесь от yum в пользу команды repoquery из пакета yum-utils . С этим вы просто запускаете:

$ repoquery --whatprovides '*/named.conf' --qf '%{NAME}'

Который в моей системе возвращает:

bind
sblim-cmpi-dns-test
bind
bind-chroot
rubygem-openshift-origin-dns-bind
system-config-bind
logwatch
bind-chroot

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .