bash 스크립트에서 yum을 통해 패키지가 설치되었는지 어떻게 알 수 있습니까? 스크립트를 작성하려고하지만 나중에

패키지를 설치하는 스크립트를 작성하려고하지만 나중에 실패하면 나중에 스크립트에서 설치된 항목을 롤백합니다. 물론 사용자가 이미 패키지를 이미 설치 한 경우 그 아래에서 패키지를 제거하고 싶지 않습니다. 스크립트에서 yum을 통해 패키지가 이전에 설치되었는지 어떻게 알 수 있습니까?



답변

세미 관련 StackOverflow 질문 에서 다음을 발견했습니다 . 내가 필요한 대답은 실제로 거기에있는 질문에 대답하지 않았으며 (정답으로 선택되지 않았습니다) 그래서 다른 사람들이 쉽게 찾을 수 있도록 여기에 게시 할 것이라고 생각했습니다.

yum list installed PACKAGE_NAME

이 명령은 사람이 읽을 수있는 출력을 반환하지만 더 중요한 것은 종료 상태 코드를 반환합니다. 0은 패키지 설치되었음을 나타내고 1은 패키지 설치 되지 않았 음을 나타냅니다 (패키지가 유효한지 여부를 확인 하지 않으므로 추적 경로를 설치하지 않은 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

편집하다:

대체 return에 전화로 문의 true하고 false값 강타를 반환하는 기대하면서 (거짓을 위해, 진정한 1을 즉, 0), 직관적 인 / 기능이 더 읽을 수 있도록 도움이됩니다.

스크립트에서 하나의 패키지를 확인하는 경우 yum list installed직접 테스트하는 것이 더 나을 수도 있지만 (IMHO) 함수를 사용하면 진행 상황을 쉽게 이해할 수 있으며 구문은 yum모든 리디렉션 보다 기억하기가 훨씬 쉽습니다. 출력을 억제합니다.


답변

“via yum”이라는 질문의 전제 조건을 정확히 충족 시키지는 않지만 “yum -q list”보다 빠릅니다.

rpm -q <package_name>

설치된 버전의 정확한 이름과 오류 코드 “0”(설치된 경우) 및 그렇지 않은 경우 “1”을 반환합니다.


답변

더 간단한 oneliner :

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

답변

yum을위한 편리한 스크립트 :

#!/bin/sh
pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME)
yum update -y
for i in ${pckarr[*]}
do
isinstalled=$(rpm -q $i)
if [ ! "$isinstalled" == "package $i is not installed" ];
then
echo Package $i already installed
else
echo $i is not INSTALLED!!!!
yum install $i -y
fi
done
updatedb

pckarr 배열에서 설치하거나 설치할 패키지를 나열하십시오.


답변

$?yum 에서 반환 값 을 읽을 수도 있습니다 . yum이 어떤 종류의 문제에 부딪 쳤는지에 따라 모든 것이 효과가 있거나 긍정적이면 0이어야합니다. 무언가 실패하면 다른 조치를 취하려는 경우 좋은 방법입니다.