패키지를 설치하는 스크립트를 작성하려고 하는데 스크립트 후반부 어느 시점에서든 실패하면 설치된 모든 항목이 롤백됩니다. 물론 사용자가 이전에 패키지를 설치한 경우 그 아래에서 패키지를 제거하고 싶지는 않습니다. 내 스크립트는 이전에 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
편집하다:
return
true
명령문을 and 호출로 바꾸면 false
bash가 기대하는 값(즉, 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이 직면한 문제 유형에 따라 양수 값이어야 합니다. 문제가 발생했을 때 다른 조치를 취하려는 경우 이는 좋은 접근 방식입니다.