bash 스크립트에서 yum을 통해 패키지가 설치되었는지 확인하는 방법은 무엇입니까?

bash 스크립트에서 yum을 통해 패키지가 설치되었는지 확인하는 방법은 무엇입니까?

패키지를 설치하는 스크립트를 작성하려고 하는데 스크립트 후반부 어느 시점에서든 실패하면 설치된 모든 항목이 롤백됩니다. 물론 사용자가 이전에 패키지를 설치한 경우 그 아래에서 패키지를 제거하고 싶지는 않습니다. 내 스크립트는 이전에 yum을 통해 패키지가 설치되었는지 어떻게 알 수 있나요?

답변1

준 관련 웹사이트에서 다음을 찾았습니다.StackOverflow 질문;제가 필요한 답변은 실제로 거기에 있는 질문에 대한 완전한 답변이 아니므로(정답으로 선택되지 않았습니다), 그래서 다른 사람들이 더 쉽게 찾을 수 있도록 여기에 게시해야겠다고 생각했습니다.

yum list installed PACKAGE_NAME

이 명령은 사람이 읽을 수 있는 일부 출력을 반환하지만 더 중요한 것은 종료 상태 코드 0은 캡슐화되었음을 의미합니다.설치됨, 1은 패키지가아니요설치됨(패키지가 유효한지 확인하지 않으므로 Traceroute가 설치되지 않은 yum list installed herpderp-beepbopboop것처럼 "1"이 반환됨 yum list installed traceroute) 그런 다음 이 종료 코드에 대해 "$?"를 확인할 수 있습니다.

출력이 다소 직관적이지 않기 때문에 래퍼 함수에서 @Chris Downs의 "압축" 버전을 사용하여 출력을 보다 "논리적"으로 만들었습니다(예: 1=설치됨 0=설치되지 않음).

function isinstalled {
  if yum list installed "$@" >/dev/null 2>&1; then
    true
  else
    false
  fi
}

사용법은

if isinstalled $package; then echo "installed"; else echo "not installed"; fi

편집하다:

returntrue명령문을 and 호출로 바꾸면 falsebash가 기대하는 값(즉, true는 0, false는 1)을 반환하면서 함수를 더 읽기 쉽고 직관적으로 만드는 데 도움이 됩니다.

스크립트에서 패키지를 확인하는 경우 직접 테스트하는 것이 더 나을 수도 있지만 (IMHO) 이 기능을 사용하면 무슨 일이 일어나고 있는지 더 쉽게 이해할 수 있으며 해당 구문을 억제하기 위한 모든 리디렉션보다 yum list installed기억하기가 더 쉽습니다 . yum산출.

답변2

"via yum"이라는 질문을 정확하게 만족시키지는 못하지만 "yum -q list"보다 빠른 전제 조건은 다음과 같습니다.

rpm -q <package_name>

설치된 경우 오류 코드 "0", 설치되지 않은 경우 "1"과 함께 설치할 수 있는 버전의 정확한 이름을 반환합니다.

답변3

더 간단한 한 줄짜리:

yum -q list installed packageX &>/dev/null && echo "Installed" || echo "Not installed"

답변4

$?yum에서 반환 값을 읽을 수도 있습니다. 모든 것이 정상이면 0이어야 하고, 그렇지 않으면 yum이 직면한 문제 유형에 따라 양수 값이어야 합니다. 문제가 발생했을 때 다른 조치를 취하려는 경우 이는 좋은 접근 방식입니다.

관련 정보