우분투 및 CentOS 배포판에서 실행할 수있는 간단한 bash 스크립트를 작성 중입니다 (Debian 및 Fedora / RHEL에 대한 지원은 플러스 일 것입니다). 스크립트가 실행중인 배포판의 이름과 버전을 알아야합니다 ( 리포지토리 생성과 같은 특정 작업을 트리거하기 위해). 지금까지 내가 얻은 것은 다음과 같습니다.
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
이 작동, 반환 또는 것 같습니다ubuntu
centos
릴리스 이름으로 (다른 사람을 시도하지 않은) . 그러나 나는 이것을 더 쉽고 신뢰할 수있는 방법으로 찾아야한다고 생각합니다. 맞습니까?
RedHat에서는 작동하지 않습니다. / etc / redhat-release는 다음을 포함합니다 : Redhat Linux Entreprise release 5.5
따라서 버전이 세 번째 단어가 아니므로 다음을 사용하는 것이 좋습니다.
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
*
와 +
주석 형식화하는을 피하기 위해, 그것은해야합니다 etc/*-release
, 작동하는 것 같다.
uname -rv | grep -i "name_of_distro"
종료 코드를 사용합니까?
+-release
작동합니까? 효과적으로 당신은 그것이 될 것이라고 가정하고/etc/lsb-release
있으므로 아마도 그것을 부르십시오.