ฉันจะรับชื่อการแจกจ่ายและหมายเลขรุ่นในเชลล์สคริปต์อย่างง่ายได้อย่างไร


191

ฉันทำงานกับสคริปต์ทุบตีง่าย ๆ ที่ควรจะสามารถทำงานบน Ubuntu และ CentOS ดิสทริบิวชั่น (รองรับ 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 รีลีส 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"

คุณแน่ใจ+-releaseเหรอ อย่างมีประสิทธิภาพคุณกำลังมองสมมติว่ามันจะเป็น/etc/lsb-releaseดังนั้นอาจจะเรียกว่า
Mikel

@ Mikel: ฉันแทนที่*ด้วย+เพื่อหลีกเลี่ยงการสร้างความคิดเห็นที่ควรจะเป็นetc/*-releaseดูเหมือนว่าจะทำงาน
Alix Axel

8
ไม่แนะนำข้อผิดพลาดทางไวยากรณ์เพื่อให้การจัดรูปแบบถูกต้อง นอกจากนี้การจัดรูปแบบไม่ถูกต้องเฉพาะในการแสดงตัวอย่างมุมมองสุดท้ายจะรับไวยากรณ์จากแท็ก
Gilles

ทำไมไม่มีใครพูดถึง fe นี้uname -rv | grep -i "name_of_distro"และใช้รหัสทางออก?
ผู้ลี้ภัย

คำตอบ:


182

ที่จะได้รับOSและมาตรฐานล่าสุดดูเหมือนว่าจะเป็นVER /etc/os-releaseก่อนหน้านั้นมีและlsb_release /etc/lsb-releaseก่อนหน้านั้นคุณต้องค้นหาไฟล์ที่แตกต่างกันสำหรับการแจกจ่ายแต่ละรายการ

นี่คือสิ่งที่ฉันแนะนำ

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

ฉันคิดว่าunameการได้มาARCHเป็นวิธีที่ดีที่สุด แต่ตัวอย่างที่คุณให้เห็นได้ชัดก็คือจัดการกับระบบของ Intel เท่านั้น ฉันอาจจะเรียกมันBITSว่าสิ่งนี้:

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

หรือเปลี่ยนARCHที่จะร่วมกันมากขึ้น แต่ที่ชัดเจนรุ่น: x86และx64หรือคล้ายกัน:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

แต่แน่นอนว่าขึ้นอยู่กับคุณ


2
ฉันจะตรวจสอบ lsb_release และใช้มันหากมี แต่ไม่มีในทุกที่ ตัวอย่างเช่นมันไม่ได้อยู่ในการติดตั้งเริ่มต้นของ Fedora 14.
Steven D

จริงๆ? คุณลองสะกดด้วย-และ_? อาจจะเป็นใน/lib/lsbหรือที่ไหนสักแห่งเช่นนั้น อะไรrpm -qa "lsb*"พิมพ์?
มิเคล

1
rpm -qa "lsb*พิมพ์อะไร ตามที่yum provides */lsb_releaseมีอยู่ในแพคเกจที่เรียกว่า redhat-lsb ซึ่งฉันเดาไม่ได้ติดตั้งโดยค่าเริ่มต้น อย่างไรก็ตามฉันไม่ใช่ผู้เชี่ยวชาญของ Fedora นี่เป็นเพียงผลลัพธ์จากการสุ่ม Fedora VM ที่ฉันมีและอาจผิดมาก
Steven D

3
เพิ่งติดตั้ง Fedora 14 ใน VM และไม่มีlsb-releaseตามที่คุณพูด
Mikel

5
อย่าใช้$OS, $VERSIONฯลฯ - โดยการประชุมเราใช้ประโยชน์จากตัวแปรสภาพแวดล้อม (PAGER, EDITOR, SHELL, ... ) และตัวแปรเชลล์ภายใน (BASH_VERSION, RANDOM, ... ) ชื่อตัวแปรอื่น ๆ ทั้งหมดควรมีตัวอักษรพิมพ์เล็กอย่างน้อยหนึ่งตัว อนุสัญญานี้หลีกเลี่ยงการแก้ไขตัวแปรสภาพแวดล้อมและภายในโดยไม่ตั้งใจ
Chris Down

58

ฉันจะไปกับสิ่งนี้เป็นขั้นตอนแรก:

ls /etc/*release

Gentoo, RedHat, Arch & SuSE /etc/gentoo-releaseมีไฟล์ที่เรียกว่าเช่น ดูเหมือนว่าจะเป็นที่นิยมตรวจสอบเว็บไซต์นี้เกี่ยวกับการปล่อยไฟล์

เดเบียนและอูบุนตูควรมีข้อมูล/etc/lsb-releaseที่มีการเผยแพร่ด้วยและจะแสดงพร้อมกับคำสั่งก่อนหน้า

uname -rvอีกคนหนึ่งอย่างรวดเร็วเป็น ถ้าเคอร์เนลที่ติดตั้งเป็นเคอร์เนลหุ้น distro คุณจะมักจะบางครั้งพบว่าชื่อในการมี


ใน Debian uname -aที่
tshepang

2
ไม่มีuname -rvข้อมูลใช่ไหม uname -aจะพิมพ์สิ่งต่าง ๆ เช่นประเภทของโปรเซสเซอร์และชื่อโฮสต์ที่ไม่เกี่ยวข้องที่นี่ ( แต่ทั้งสองปล่อยเคอร์เนล ( -r) และรุ่น ( -v) มีความจำเป็นไม่ distros ทุกคนทำมันเดียวกันมี)
จ้า

-r unameให้2.6.32-5-686-bigmemและ-v unameให้#1 SMP Tue Mar 8 22:14:55 UTC 2011ใน Debian 6. uname -a OTOH Linux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linuxให้
tshepang

ส่วนที่สองuname -aคือ-nคือ nodename == ชื่อโฮสต์ ดังนั้นฉันจะบอกว่าunameจะไม่น่าสนใจในเดเบียน ลองคิดดูฉันไม่แน่ใจว่า RedHat มีประโยชน์มากเช่นกัน
จ้า

โอวตกลง. debianดังนั้นจึงเป็นเพียงแค่โชคที่ผมตั้งชื่อโฮสต์ของฉันเป็นค่าเริ่มต้น
tshepang

36

lsb_release -a. ใช้งานได้กับ Debian และฉันเดาว่า Ubuntu แต่ฉันไม่แน่ใจเกี่ยวกับส่วนที่เหลือ โดยปกติควรมีอยู่ในการแจกแจง GNU / Linux ทั้งหมดเนื่องจากเกี่ยวข้องกับ LSB (ฐานมาตรฐาน Linux)


3
มันไม่ได้ติดตั้งโดยค่าเริ่มต้นใน Gentoo มันไม่ได้โดยเริ่มต้นใน Fedora ทั้งในบางจุด (อาจอยู่ในขณะนี้แม้ว่า)
จ้า

2
สิ่งนี้ใช้ได้กับเดเบียนบีบ Fedora 14 และ OpenSUSE 11.3 บน Debian และ SUSE แพ็คเกจที่มี lsb_release คือ lsb-release บน Fedora มันคือ redhat-lsb ติดตั้งไว้แล้วใน Debian และ SUSE แต่ไม่ใช่บน Fedora ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดจนถึงตอนนี้ +1
Faheem Mitha

3
lsb_release ไม่ได้เป็นส่วนหนึ่งของการติดตั้งขั้นต่ำของ CentOS 6
coder

1
lsb_release -aส่งคืน "-bash: lsb_release: ไม่พบคำสั่ง" บน Raspberry with Raspbian ( มาจากDebian 7.1)
Peter Mortensen

lsb_release -a ทำงานบน Red Hat Enterprise Linux Server รีลีส 6.6 (Santiago)
jwilleke

21

หนึ่งซับ, fallbacks, หนึ่งบรรทัดเอาต์พุต, ไม่มีข้อผิดพลาด

lsb_release -ds 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 || uname -om

สวยขอบคุณ โปรดทราบว่านี่ยังใช้งานไม่ได้กับ Mac OS X แต่ใช้งานได้ดีบน Ubuntu และ CentOS (ซึ่งเป็นสามอย่างที่ฉันมีประโยชน์)
สัญลักษณ์แทน

2
ยอดเยี่ยม! ทำไมคำตอบแบบนี้ไม่ได้อยู่ข้างบน?
Neo


9
  1. lsb- * ไม่ได้ติดตั้ง / ไม่มีอยู่ในระบบ CentOS หรือ Debian พื้นฐาน
  2. / proc / * ไม่มีอยู่ใน OSX

รับคำแนะนำจากนักพัฒนาจาวาสคริปต์ อย่าทดสอบเวอร์ชั่นทดสอบความสามารถ มันไม่สวย แต่ใช้งานได้ ขยายตามความจำเป็น

function os_type
{
case `uname` in
  Linux )
     LINUX=1
     which yum && { echo centos; return; }
     which zypper && { echo opensuse; return; }
     which apt-get && { echo debian; return; }
     ;;
  Darwin )
     DARWIN=1
     ;;
  * )
     # Handle AmgiaOS, CPM, and modified cable modems here.
     ;;
esac
}  

6
ยำอาจเป็น Red Hat, Scientific Linux หรือ Fedora ได้เป็นอย่างดี มีคำสั่งที่เข้าใจง่ายสำหรับ Fedora ล้อเลียนเดเบียน และอื่น ๆ เพียงแค่ clasifying อะไรกับยำเนื่องจาก CentOS มอบระบบที่รองรับมากมายตั้งแต่ Red Hat 4 ถึง Fedora 18 นั่นคือประวัติ Linux 8 ปีที่นั่น หากคุณจำเป็นต้องรู้ว่ารองรับ <foo> หรือไม่ให้ตรวจสอบเฉพาะ <foo> แทนการเดาตามการระบุการแจกจ่าย (ไม่น่าเชื่อถือ)! แน่นอนมันนำไปสู่บางสิ่งที่เป็นประโยชน์ของเครื่องมืออัตโนมัติ แต่นั่นก็ไม่สามารถช่วยได้ (เพียงแค่ขอบคุณ $ DEITY ที่สงคราม Unix สิ้นสุดลง)
vonbrand

@ vonbrand แน่นอนมันเป็นอย่างที่คุณพูด ฉันไม่พยายามแยกความแตกต่างระหว่างรสชาติย่อย และลำดับที่ฉันเช็คอิน (หวังว่า) จะลบสถานการณ์ที่ยุ่งยากมากที่สุด (RHEL เมื่อติดตั้ง apt-get) แม้ว่าฉันจะไม่ได้ทำการวิจัยมากนัก ถ้า RHEL สามารถติดตั้ง apt-get ได้และผู้ใช้ Ubuntu มียำ ... เอาละคุณก็โชคไม่ดี
Orwellophile

6

เพื่อความสำเร็จที่น่าจะเป็นไปได้มากที่สุดสิ่งเหล่านี้:

cat /etc/*version
cat /proc/version #linprocfs/version for FreeBSD when "linux" enabled
cat /etc/*release
uname -rv

ครอบคลุมกรณีส่วนใหญ่ (AFAIK): Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD และอื่น ๆ


cat /etc/*versionไม่ทำงาน (ไม่มีไฟล์ดังกล่าว) บน CentOS (อย่างน้อย 6.4)
om-nom-nom

หากคุณเรียกใช้คำสั่งในคอนเทนเนอร์ / proc / version จะมีรุ่นการแจกจ่าย HOST ไม่ใช่การแจกจ่ายคอนเทนเนอร์
Dereckson

5

สำหรับระบบ Linux OS ที่ทันสมัยส่วนใหญ่ไฟล์/etc/os-releaseนั้นกำลังเป็นมาตรฐานและกำลังถูกรวมอยู่ในระบบปฏิบัติการส่วนใหญ่ ดังนั้นใน Bash script ของคุณคุณสามารถรวมไฟล์และคุณจะสามารถเข้าถึงตัวแปรทั้งหมดที่อธิบายไว้ที่นี่ (ตัวอย่างเช่น: NAME, VERSION, ... )

ดังนั้นฉันแค่ใช้สิ่งนี้ในสคริปต์ Bash ของฉัน:

if [ -f /etc/os-release ]
then
        . /etc/os-release
else
        echo "ERROR: I need the file /etc/os-release to determine what my distribution is..."
        # If you want, you can include older or distribution specific files here...
        exit
fi

3

หากไฟล์/etc/debian_versionมีอยู่การกระจายเป็น Debian หรืออนุพันธ์ Debian ไฟล์นี้อาจมีหมายเลขรุ่น 6.0.1ในเครื่องของฉันขณะนี้ หากเป็นการทดสอบหรือไม่เสถียรอาจเป็นการทดสอบ / ไม่เสถียรหรืออาจมีจำนวนรุ่นที่จะออกมา ความประทับใจของฉันคือบน Ubuntu อย่างน้อยไฟล์นี้จะทดสอบ / ไม่เสถียรเสมอและพวกเขาจะไม่ใส่หมายเลขรุ่นออกมา แต่ใครบางคนสามารถแก้ไขฉันได้ถ้าฉันผิด

Fedora (รุ่นล่าสุดอย่างน้อย) /etc/fedora-releaseมีไฟล์ที่คล้ายกันคือ


เวอร์ชัน Debian ที่ใหม่กว่าใช้ / etc / os-release แทน
Dereckson

1
@Dereckson ฉันจะตรวจสอบเครื่องดังเสียงฮืด ๆ ของฉันและมันมีทั้งและ/etc/debian_version /etc/os-release
Faheem Mitha

ทดสอบใน chroot ของ Jessie ที่สร้างด้วย debootstrap แต่แท้จริงแล้วเครื่องท้องถิ่นภายใต้เจสซี่คราวนี้ติดตั้งด้วยวิธีธรรมดากว่ามี/etc/debian_versionไฟล์ ดังนั้นวิธีที่เราเตรียมการติดตั้ง Debian อาจส่งผลต่อไฟล์รีลีสที่มีอยู่นั่นน่าสนใจ
Dereckson

Debian ของไม่รวมถึงหมายเลขรุ่นเต็มรูปแบบจากos-release debian_versionดูunix.stackexchange.com/questions/382531
JdeBP

2

หากคุณไม่สามารถหรือไม่ต้องการใช้ไฟล์รีลีส LSB (เนื่องจากการขึ้นต่อกันของแพ็คเกจ) คุณสามารถค้นหาไฟล์รีลีสเฉพาะสำหรับ distro Bcfg2มีโพรบสำหรับ distro ที่คุณอาจใช้: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt


1

2 วิธีจากหลาย ๆ

1) การใช้งาน

lsb_release -a

ฉันทดสอบบน CentOS 5.5 และ Ubuntu 10.04

ผลลัพธ์สำหรับ CentOS คือ:

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch 
Distributor ID: CentOS
Description:    CentOS release 5.5 (Final)
Release:        5.5
Codename:       Final

และสำหรับ Ubuntu คือ:

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description:    CentOS release 5.5 (Final)
Release:        5.5
Codename:       Final

2) ป้อนคำสั่งต่อไปนี้:

cat /etc/*-release

ฉันทดสอบกับ CentOS 5.5 และ Ubuntu 10.04 และใช้งานได้ดี


lsb_release ไม่ได้อยู่ใน CentOS 6 (การติดตั้งขั้นต่ำ fwiw)
coder

lsb_release -aส่งคืน "-bash: lsb_release: ไม่พบคำสั่ง" บน Raspberry with Raspbian ( มาจากDebian 7.1)
Peter Mortensen

0

สคริปต์นี้ใช้งานได้กับ Debian (อาจต้องบิดบน Ubuntu)

#!/usr/bin/env bash

echo "Finding Debian/ Ubuntu Codename..."

CODENAME=`cat /etc/*-release | grep "VERSION="`
CODENAME=${CODENAME##*\(}
CODENAME=${CODENAME%%\)*}

echo "$CODENAME"
# => saucy, precise, lucid, wheezy, squeeze

0

นี่เป็นเวอร์ชั่นง่ายๆของฉัน ^^;

#!/usr/bin/env bash
check_distro2(){
    if [[ -e /etc/redhat-release ]]
    then
      DISTRO=$(cat /etc/redhat-release)
    elif [[ -e /usr/bin/lsb_release ]]
    then
      DISTRO=$(lsb_release -d | awk -F ':' '{print $2}')
    elif [[ -e /etc/issue ]]
    then
      DISTRO=$(cat /etc/issue)
    else
      DISTRO=$(cat /proc/version)
    fi
    }

    check_distro2
    echo $DISTRO

0

หากไม่มีเวอร์ชันเพียง dist:

cat /etc/issue | head -n +1 | awk '{print $1}'

Yahya Yahyaoui คำตอบจากปีก่อนหน้านั้นพูดแบบเดียวกัน คำตอบทั้งสองนี้ได้รับการแก้ไขในปี 2554 ในคำตอบที่ถูกลบไปแล้ว เหตุผลที่พวกเขาผิดยังคงใช้
JdeBP

0

สิ่งนี้ได้รับการทดสอบบน Ubuntu 14 และ CentOS 7

cat /etc/os-release | grep "PRETTY_NAME" | sed 's/PRETTY_NAME=//g' | sed 's/["]//g' | awk '{print $1}'

@don_crissti คุณจะทำอย่างไร
BsdHelper

sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
cas

@cas ดีมาก! เพิ่มที่กล่องเครื่องมือของฉัน ขอบคุณสำหรับการแชร์.
BsdHelper

0

ฉันพบสคริปต์ที่ดีจากที่นี่ซึ่งใช้งานได้กับ linux ทั่วไปส่วนใหญ่:

#! /bin/bash
# return an awkable string consisting of
#    unix OS type, or
#    Linux dist, or
#    a long guess (based on /proc), or
#    no clue

giveUp () {
   echo "Unknown"
   exit 0
}

# keep this easily awkable, prepending an initial clue
versionGuess () {
   if [ -e /proc/version ]; then
      echo -n "Unsure "
      cat /proc/version
      exit 0
   fi
   return 1
}

# if we have ignition, print and exit
gotDist () {
   [ -n "$1" ] && echo "$1" && exit 0
}

# we are only interested in a single word "dist" here
# various malformations can occur; admin will have to code appropately based on output
linuxRelease () {
   if [ -r /etc/lsb-release ]; then
      dist=$(grep 'DISTRIB_ID' /etc/lsb-release | sed 's/DISTRIB_ID=//' | head -1)
      gotDist "$dist"
   fi

   dist=$(find /etc/ -maxdepth 1 -name '*release' 2> /dev/null | sed 's/\/etc\///' | sed 's/-release//' | head -1)
   gotDist "$dist"

   dist=$(find /etc/ -maxdepth 1 -name '*version' 2> /dev/null | sed 's/\/etc\///' | sed 's/-version//' | head -1)
   gotDist "$dist"

   return 1
}

# start with uname and branch the decision from there
dist=$(uname -s 2> /dev/null)
if [ "$dist" = "Linux" ]; then
   linuxRelease
   versionGuess
   giveUp
elif [ -n "$dist" ]; then
   echo "$dist"
   exit 0
else
   versionGuess
   giveUp
fi

# we shouldn't get here
giveUp
# done


0

มีgem ruby facterซึ่งให้ข้อเท็จจริงบางอย่างเกี่ยวกับระบบปฏิบัติการ OS มันทำการวิเคราะห์ไฟล์ release OS ข้อมูลอื่นและพิมพ์ไปที่หน้าจอเทอร์มินัล คุณสามารถลองได้ดังนี้เริ่มต้นด้วยการติดตั้ง rubygems:

# apt-get install rubygems

โปรดใช้กรณีด้านบนที่มีสิทธิ์ใช้งานระบบปฏิบัติการของคุณ จากนั้นติดตั้งพลอยเอง

# gem install facter

จากนั้นใช้:

$ facter

หมายเหตุ: ดูแหล่งข้อมูล facter gem เพื่อรับข้อมูลเพิ่มเติมในการติดตั้ง


0

หากใครต้องการ distro ด้วย:

#!/usr/bin/env bash

LINUX_VERSION_NAME=`lsb_release -sr`


# Distribution specific installation
if [[ ${LINUX_VERSION_NAME} == "18.04" ]]
then
    echo "It is: ${LINUX_VERSION_NAME}"

else
    echo "It is not ${LINUX_VERSION_NAME}"
fi

เอาท์พุท:

It is: 18.04

เปลี่ยนเป็น: lsb_release -sc เพื่อรับ distro:

LINUX_VERSION_NAME=`lsb_release -sc`


# Distribution specific installation
if [[ ${LINUX_VERSION_NAME} == "bionic" ]]
then
    echo "It is: ${LINUX_VERSION_NAME}"

else
    echo "It is not ${LINUX_VERSION_NAME}"
fi

เอาท์พุท:

It is: bionic

-3

คำสั่งนี้ใช้ได้กับการแจกแจงแบบอิงเดเบียนและ Redhat: การใช้trตัวกรองคุณแปลงเอกสารเป็นรูปแบบคำต่อบรรทัดแล้วนับบรรทัดแรกที่มีชื่อการแจกจ่าย

tr -s ' \011' '\012' < /etc/issue | head -n 1

ความคิดเห็นเกี่ยวกับคำตอบที่ถูกลบตอนนี้จาก 2011 ที่กล่าวในสิ่งเดียวกันยังคงใช้ เช่นเดียวกับคำตอบที่ไม่ถูกต้องตอนนี้ลบอีกครั้งซึ่งกล่าว/etc/issueว่าไม่ได้มีรุ่นหรือชื่อใน zenwalk ไฟล์นี้เป็นไฟล์ที่ผู้ดูแลระบบสามารถแก้ไขได้ซึ่งมีข้อความที่นำเสนอต่อมนุษย์โดยไม่รับประกันว่าจะมีสิ่งใดที่สามารถดึงออกมาได้โดยทางโปรแกรม
JdeBP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.