답변:
세미 관련 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
모든 리디렉션 보다 기억하기가 훨씬 쉽습니다. 출력을 억제합니다.
isInstalled
패키지가 설치된 경우 1을 반환합니다. bash에서 1은 false로 평가되므로 "설치되지 않음"이 에코됩니다.
return
문을 true
and에 대한 호출 로 바 꾸었 false
으므로 함수를 쉽게 읽을 수 있지만 bash가 기대하는 출력을 반환합니다.
"via yum"이라는 질문의 전제 조건을 정확히 충족 시키지는 않지만 "yum -q list"보다 빠릅니다.
rpm -q <package_name>
설치된 버전의 정확한 이름과 오류 코드 "0"(설치된 경우) 및 그렇지 않은 경우 "1"을 반환합니다.
rpm
로컬 패키지 관리자 이기 때문에 확실히 빠릅니다 . yum
원격 저장소의 패키지 처리
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 배열에서 설치하거나 설치할 패키지를 나열하십시오.
$?
명령을 조건부로 감싸면됩니다.if yum list installed "$package" >/dev/null 2>&1; then [...]