패키지를 설치하는 스크립트를 작성하려고하지만 나중에 실패하면 나중에 스크립트에서 설치된 항목을 롤백합니다. 물론 사용자가 이미 패키지를 이미 설치 한 경우 그 아래에서 패키지를 제거하고 싶지 않습니다. 스크립트에서 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이어야합니다. 무언가 실패하면 다른 조치를 취하려는 경우 좋은 방법입니다.