Tôi đang làm việc với một tập lệnh bash đơn giản có thể chạy trên các bản phân phối Ubuntu và CentOS (hỗ trợ cho Debian và Fedora / RHEL sẽ là một điểm cộng) và tôi cần biết tên và phiên bản phân phối mà tập lệnh đang chạy ( để kích hoạt các hành động cụ thể, ví dụ như việc tạo các kho lưu trữ). Cho đến nay những gì tôi có là đây:
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
Điều này dường như hoạt động, trở lại ubuntu
hoặc centos
(tôi chưa thử người khác) làm tên phát hành. Tuy nhiên, tôi có cảm giác rằng phải có một cách dễ dàng hơn, đáng tin cậy hơn để tìm ra điều này - điều đó có đúng không?
Nó không hoạt động cho RedHat. / etc / redhat-phát hành có chứa: Redhat Linux Entreprise phát hành 5.5
Vì vậy, phiên bản không phải là từ thứ ba, bạn nên sử dụng tốt hơn:
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"
*
với +
để tránh Formating bình luận, nó phải là etc/*-release
, có vẻ như để làm việc.
uname -rv | grep -i "name_of_distro"
và sử dụng mã thoát?
+-release
làm việc? Thực tế, bạn đang tìm kiếm giả định nó sẽ/etc/lsb-release
như vậy, vì vậy có lẽ chỉ cần gọi nó như vậy.