"yum presents" 출력 형식

"yum presents" 출력 형식

구성 파일을 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
...

답변1

패키지 의 명령을 yum선호 한다면 더 행복해질 것입니다 . 이를 통해 다음을 실행하면 됩니다.repoqueryyum-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

답변2

나는 다양한 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 지식으로는 이것이 내가 할 수 있는 최선입니다.

관련 정보