คุณจะบอกเวอร์ชั่นของ Ubuntu บนระบบในสคริปต์. sh (bash) ได้อย่างไร


9

ดังนั้นฉันจึงพยายามสร้าง bash / executable และฉันต้องรู้หมายเลขเวอร์ชันของ Ubuntu บนระบบ ทุกวิธีที่ฉันพบทางออนไลน์นั้นประกอบด้วยlsb_release -rแต่ฉันไม่สามารถเอาสิ่งนี้ไปเป็นตัวแปรได้

มีวิธีการรับรุ่นปัจจุบันของ Ubuntu และบันทึกเป็นตัวแปรในเปลือกปฏิบัติการหรือไม่


ใช่ฉันซาบซึ้ง ขออภัยฉันไม่ทราบว่ามีเอกสารเกี่ยวกับเรื่องนี้ ฉันขอบคุณมันอย่างใด
a.mosallaei

ใช่ฉันทำไปแล้ว ขอบคุณ
a.mosallaei

คำตอบ:


21
Var=$(lsb_release -r)
echo "$Var"

ควรทำเคล็ดลับ

สำหรับส่วนที่เป็นตัวเลขให้เพิ่มสิ่งนี้:

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

lsb-releaseไฟล์ตัวแปร

/usr/bin/lsb_releaseเป็นสคริปต์ Python มันเป็นสคริปต์สั้น ๆ ที่ทำหน้าที่เป็นบทนำที่ดีสำหรับภาษาไพ ธ อน ดังที่คนอื่น ๆ กล่าวถึงวิธีที่สั้นกว่าในการรับหมายเลขเวอร์ชันนั้นlsb_release -srมาจาก

/etc/lsb-releaseไฟล์กำหนดตัวแปรสิ่งแวดล้อมกับข้อมูลเดิมที่มีให้โดยlsb_release -aคำสั่ง:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

. /etc/lsb-releaseคุณสามารถรวมตัวแปรสภาพแวดล้อมเหล่านี้ที่ทุกเวลาโดยใช้ วิธีทดสอบในเครื่องเทอร์มินัลของคุณ:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS

ใช่แล้วขอบคุณมันใช้ได้ผลมันออกRelease: 18.04มา อย่างไรก็ตามมีวิธีรับหมายเลขหรือไม่ ฉันต้องการใช้ตัวแปรนี้ในฟังก์ชัน if / else ในสคริปต์ วัตถุประสงค์ของ if / else คือเพื่อดาวน์โหลดเวอร์ชั่นที่ถูกต้องของแอปพลิเคชันของฉันสำหรับ distro ของ Ubuntu
a.mosallaei

อาไม่เป็นไร @ user68186 แก้ไขปัญหาของฉัน ขอบคุณมาก ๆ !
a.mosallaei

ฉันกำลังจะเขียนคำตอบ แต่คุณเอาชนะฉันได้! :-) ฉันยินดีที่จะมีส่วนร่วม
user68186

4
@ a.mosallaei คำเตือน - หากคุณใช้หมายเลขและละเว้นทุกอย่างสคริปต์นี้จะมีผลลัพธ์แปลก ๆ บนเครื่องที่ไม่ใช่อูบุนตู (รวมถึงการกระจายที่ใช้ Ubuntu เป็นจำนวนมาก "Ubuntu") แต่มีชื่อและเวอร์ชันของตัวเอง); คุณอาจต้องตรวจสอบว่าผลลัพธ์ lsb_release เริ่มต้นด้วย "Ubuntu" ก่อนที่จะใช้หมายเลข
Peteris

1
@ a.mosallaei คุณบอกว่าไฟล์ปฏิบัติการของคุณจะใช้กับคอมพิวเตอร์ Ubuntu เท่านั้น คุณรู้ได้อย่างไร? มันจะดีกว่าถ้ามีความล้มเหลวที่จะเกิดขึ้นถ้า distro ไม่ใช่ Ubuntu เชื่อใจฉันผู้ใช้จะพยายามผิดพลาดโปรแกรมของคุณ
KryštofPíštěk

11

อีกทางเลือกหนึ่งคือการใช้/etc/os-releaseไฟล์แทน นี่เป็นรูปแบบของรายการตัวแปรเชลล์:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

ดังนั้นวิธีที่ง่ายในการแยกมันเป็นเพียงsourceไฟล์:

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

เพื่อหลีกเลี่ยงการตั้งค่าตัวแปรทั้งหมดเหล่านี้โดยไม่จำเป็นคุณสามารถระบุไฟล์ในsubshell , echo ตัวแปรที่คุณต้องการและออกจาก subshell:

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

หรือคุณสามารถแยกวิเคราะห์ไฟล์ได้โดยตรง:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04

1
โปรดทราบว่าสำหรับอนุพันธ์ของ Ubuntu ข้อมูลรุ่นอาจอ้างอิงถึงเวอร์ชั่นดาวน์สตรีม (เช่นฉันมี VERSION_ID = "18.3" และ VERSION_CODENAME = "sylvia" สำหรับช่อง Mint ของฉัน) แม้ว่า UBUNTU_CODENAME ควรถูกต้อง
Roger Lipscombe

subshell เป็นวิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้ใช่ไหม
JamesTheAwesomeDude

@JamesTheAwesomeDude อาจจะใช่
terdon

8

lsb_releaseคำสั่งสนับสนุน-s(หรือ--short) ตัวเลือกในการพิมพ์ข้อมูลที่คุณขอและไม่ได้ส่วนหัวที่บอกว่าสิ่งที่ชนิดของข้อมูลที่มี

ในการรับหมายเลขรุ่นมันจึงเพียงพอที่จะเรียกใช้:

lsb_release -sr

ตัวอย่างเช่นบน Ubuntu 18.04 LTS ผลลัพธ์นั้น:

18.04

เช่นเดียวกับวิธีการในคำตอบของ WinEunuuchs2Unixก็ยังมีเหตุผลที่จะใช้การทดแทนคำสั่งเพื่อกำหนดผลลัพธ์นี้ให้กับตัวแปรเชลล์ สมมติว่าคุณต้องการให้verตัวแปรเก็บหมายเลขการปล่อยไว้:

ver="$(lsb_release -sr)"

ด้วย-sไม่มีความจำเป็นที่จะแยกออกหมายเลขที่มีcut, sed, grep, awk, รูปแบบที่ซับซ้อนมากขึ้นของการขยายตัวพารามิเตอร์หรือชอบ

ในการใช้งานนี้" "อัญประกาศเป็นตัวเลือก แต่โดยทั่วไปฉันขอแนะนำให้พูดถึงการขยายพารามิเตอร์และการขยายเชลล์อื่น ๆยกเว้นเมื่อไม่มีเหตุผล


ใช่ขอบคุณ! ฉันไม่เคยเข้าใจ -s แต่คุณอธิบายได้อย่างสมบูรณ์แบบ! ชื่นชม
a.mosallaei

5

lsb_releaseคำสั่งสั้นและง่าย

  • เพื่อพิมพ์เวอร์ชั่นเท่านั้น

    lsb_release -sr

    เอาท์พุท:

    18.04
  • เพื่อพิมพ์คำอธิบาย

    lsb_release -sd

    เอาท์พุท:

    Ubuntu 18.04.2 LTS

เกี่ยวกับธงที่ใช้ที่นี่:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.