RPM SPEC 파일은 태그의 패키지 버전을 이해하므로 Requires:
SPEC Provides:
파일 내에서 이름이 혼동되는 경우에도 적절한 종속성을 쉽게 구축할 수 있습니다(예: 충돌을 방지하고 패키지의 여러 버전을 허용하기 위해).
예를 들어 foo 패키지는 업데이트된 버전을 제공합니다.
Name: foox
Provides: foo = 2
그리고
Name: bar5
Requires: foo >= 2
훌륭하게 작동합니다. foox도 설치되지 않으면 yum은 bar5를 설치하지 않습니다.
내 질문 - foo = 2
어떤 패키지가 제공되는지 명령줄에서 어떻게 쿼리할 수 있나요?
rpm 매뉴얼 페이지에서 볼 수 있듯이
--어떤 기능이 제공되나요?
Query all packages that provide the CAPABILITY capability.
--공급
List capabilities this package provides.
충분할 것입니다. 버전을 볼
수 있어요 . 버전만 구할 수도 있어요 . 하지만 이름과 버전으로는 실제 패키지 이름을 알 수 없습니다 .rpm -q --provides <package name>
rpm -q --qf %{VERSION} <package name>
rpm -q --whatprovides
나는 또한 그것을 시도했지만 rpm -q --provides foo
foox가 설치되고 foo = 2가 제공되었음에도 불구하고 원래 foo = 1만 얻습니다.
내가 원하는 것은 다음과 같은 마법입니다.
$ rpm -q --whatprovides "foo = 2"
$ foox
답변1
꽤 가깝습니다.
rpm -q --whatprovides "foo = 2"
그러나 버전을 허용하지 않습니다. 이렇게 하려면 한 단계 뒤로 돌아가서 출력 형식을 지정하세요.
rpm -q --whatprovides foo
이와 같이:
rpm -q --queryformat "%{VERSION}:%{NAME}\n" --whatprovides foo
그리고 grep("2" 선택)으로 결과를 필터링한 다음 sed로 결과를 필터링하여 추가 버전과 콜론을 제거합니다.
grep -E '/^2:/' | sed -e 's/^[^:]*://'
이는 패키지 이름만 제공합니다. 실제로는 버전, 릴리스 및 스키마가설치하다종속성을 수정합니다.
참고로:5.2.5. 특정 기능을 제공하는 패키지 확인(페도라 RPM 가이드)
OP의 의견과 관련하여 awk는 더 간단합니다.
awk -F: '{ if ($1 == "2") print $2}'
동의합니다(그러나 구성 스크립트의 관례에 따라 이식성이 약간 떨어지므로 awk 다음에 grep/sed를 사용하십시오). 그러나 주어진 값보다 크거나 같은 버전의 패키지를 확인하려면 awk가 훨씬 더 간단합니다.
awk -F: '{ if ($1 >= 2) print $2}'
오늘 아침에 떠나고 나서 그런 생각이 들었어요. 그러나 이러한 유형의 비교는 아마도 정확한 일치보다 사양 파일에서 더 일반적일 것입니다. 또한, 인용문으로 "2"
인해 awk는 이를 숫자 대신 문자열로 처리하게 될 수도 있습니다. 이는 version 과 일치하지 않지만 2.0
따옴표와 숫자를 해제하면 일치하게 됩니다.
@데이브 톰슨-085비교가 다음에 포함되어야 함을 나타냅니다.행동불필요합니다. 즉, 모든 행에 대해 앞 부분 {
과 }
뒤 부분이 하나의 동작입니다(패턴이 제공되지 않으므로). mawk에서 인용함매뉴얼 페이지:
AWK 프로그램은 일련의무늬 {행동}쌍 및 사용자 기능 정의.
그런 다음
A pattern can be:
BEGIN
END
expression
expression , expression
표현은 아마도정규식, 하지만 그럴 수도 있습니다.비교하다. 그가 제안한 개선 사항은 다음과 같습니다.
awk -F: '$1>=2{print $2}'