저는 컴퓨터를 Red Hat Enterprise Linux 5에서 RHEL 6으로 천천히 전환하는 환경에서 일하고 있습니다.
현재 RHEL5 시스템에서 수행하는 것과 약간 다른 작업을 RHEL6 시스템에서 수행하려면 일부 스크립트가 필요합니다.
실용적인 솔루션은 런타임에 확인하고 RHEL5에서 일부 명령을 실행하고, RHEL6에서 일부 명령을 실행하고, 둘 다에서 일부 명령을 실행하는 것입니다.
실제적인 예는 환경 모듈을 사용하고 있고 .bashrc
한 줄을 포함 했지만 module load git
RHEL6 시스템에서는 이 명령에 오류가 발생한다는 것입니다.
RHEL6 system, git should be installed - not loading module
모듈 파일을 살펴보면 다음 코드를 발견했습니다.
set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
...
}
이것은 내 요구 사항에 맞는 것 같지만 더 짧게 만들고 싶습니다.
그렇다면 bash 스크립트에서 RHEL5와 RHEL6을 구별하는 가장 쉬운 방법은 무엇입니까?
이상적으로는 주요 버전 전반에 걸쳐 강력해야 하지만 부 버전 번호의 변경을 허용해야 합니다.
답변1
if grep -q -i "release 6" /etc/redhat-release
then
echo "running RHEL 6.x"
fi
이것이 제가 생각할 수 있는 가장 쉬운 방법일 것입니다.
답변2
이 명령을 사용할 수도 있습니다 lsb_release
. RHEL이라고 판단한 경우 주 버전 번호를 얻는 방법은 다음과 같습니다.
majversion=$(lsb_release -rs | cut -f1 -d.)
답변3
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)
rpm -q --queryformat '%{RELEASE}' rpm
비슷한 것을 인쇄하십시오 25.el7
. 그런 다음 마지막 숫자를 취하십시오. RHEL 5, 6, 7 및 Fedora 24에서 테스트되었습니다.
다른 분들이 지적하셨듯이 lsb-version
설치가 불가능할 수도 있습니다. 또한 하나 이상의 RHEL5 시스템에 redhat-release-server
이 패키지가 설치되어 있지 않습니다.
답변4
이 결과를 얻는 또 다른 더 정확한 방법이 있습니다. RHEL의 커널 패키지에는 "elN"이라는 문자열이 포함되어 있습니다. 여기서 N은 운영 체제의 주요 버전을 나타냅니다. 따라서 다음 명령을 실행하여 RHEL 버전을 식별할 수 있습니다.
# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'
이는 지정된 호스트의 일치하는 문자열에 따라 "el5", "el6" 또는 "el7" 문자열을 반환합니다.