Formato "yum fornisce" output


1

Sto scrivendo un piccolo programma che confeziona i file di configurazione come rpm e mette una serie di trigger% per gestire l'installazione / l'aggiornamento dei pacchetti che portano una copia / versione dello stesso file.

Sono bloccato cercando di formattare yum fornisce output. L'output predefinito è:

# 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

Ma ho bisogno solo del nome del pacchetto. L'uso cutnon sembra una buona idea. Il delimitatore sarebbe - ma ci sono diversi pacchetti con a - nel mezzo del nome del pacchetto.

Idealmente avrei bisogno che l'output sia formattabile come per le query rpm:

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

Sembra che non sia affatto disponibile. Né è il sostituto di Fedora, dnf.
vonbrand

Risposte:


0

Sarai più felice se abbandonerai yumil repoquerycomando dal yum-utilspacchetto. Con questo, corri e basta:

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

Che, sul mio sistema, restituisce:

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

Grande. Implementerò entrambe le soluzioni, quindi se verrà utilizzato il repoquery se disponibile, altrimenti verrà utilizzato il "fudge" sopra
Bruno9779

0

Ho escogitato una brutta soluzione per questo problema usando vari comandi yum, sed, grep e 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

Quindi ho rimosso i duplicati dall'array

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

Con le mie attuali conoscenze bash è il meglio che potrei fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.