Bagaimana Anda bisa mengetahui versi Ubuntu pada sistem dalam skrip .sh (bash)?

9

Jadi saya mencoba membuat bash / executable, dan saya perlu tahu nomor versi Ubuntu di sistem. Semua cara yang saya temukan online terdiri dari lsb_release -r, namun saya tidak dapat menampilkan ini ke dalam variabel.

Apakah ada cara untuk mendapatkan versi Ubuntu saat ini dan menyimpan sebagai variabel dalam shell yang dapat dieksekusi?

a.mosallaei
sumber
Ya, saya sangat menghargainya. Maaf, saya tidak tahu ada dokumentasi tentang ini. Saya menghargainya
a.mosallaei
Ya saya sudah melakukannya. Terima kasih
a.mosallaei

Jawaban:

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

Sebaiknya lakukan triknya.

Untuk bagian numerik hanya tambahkan ini:

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

File lsb-releasevariabel

/usr/bin/lsb_releaseadalah skrip Python. Ini adalah skrip pendek yang berfungsi sebagai pengantar yang bagus untuk bahasa python. Seperti yang disebutkan lainnya, cara yang lebih pendek untuk mendapatkan nomor versi hanya dengan lsb_release -sr.

The /etc/lsb-releaseFile mendefinisikan variabel lingkungan dengan informasi yang sama yang diberikan oleh lsb_release -aperintah:

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

Anda dapat memasukkan variabel lingkungan ini kapan saja menggunakan . /etc/lsb-release. Untuk menguji di terminal Anda:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
sumber
jadi ya terima kasih, itu berhasil, ini menghasilkan Release: 18.04. Namun apakah ada cara untuk mendapatkan nomornya? Saya ingin dapat menggunakan variabel ini dalam fungsi if / else dalam skrip. Tujuan if / else adalah untuk mengunduh versi aplikasi saya yang benar untuk distro ubuntu.
a.mosallaei
Ah tidak apa-apa. @ user68186 memecahkan masalah saya. Terima kasih banyak kawan!
a.mosallaei
Saya akan menulis jawabannya tetapi Anda mengalahkan saya untuk itu! :-) Saya senang berkontribusi.
user68186
4
@ a.mosallaei kata hati-hati - jika Anda hanya menggunakan nomor bagian dan mengabaikan yang lainnya, skrip ini akan memiliki hasil aneh pada mesin non-Ubuntu (termasuk banyak distribusi berbasis Ubuntu yang Ubuntu "kompatibel" tetapi memiliki nama dan versi sendiri); Anda mungkin perlu memverifikasi apakah hasil lsb_release dimulai dengan "Ubuntu" sebelum menggunakan nomor tersebut.
Peteris
1
@ a.mosallaei Anda mengatakan bahwa executable Anda hanya akan digunakan pada komputer Ubuntu. Bagaimana Anda tahu bahwa? Lebih baik memiliki failafe yang keluar jika distro bukan Ubuntu. Percayalah, pengguna akan mencoba menghentikan program Anda.
Kryštof Píštěk
11

Alternatifnya adalah menggunakan /etc/os-releasefile sebagai gantinya. Ini diformat sebagai daftar variabel shell:

$ 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

Jadi cara termudah untuk menguraikannya adalah dengan cukup sourcedengan file:

$ . /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

Untuk menghindari pengaturan semua variabel ini secara tidak perlu, Anda dapat sumber file dalam subkulit , gema variabel yang Anda butuhkan dan keluar dari subkulit:

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

Atau, Anda dapat selalu mem-parsing file secara langsung:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
terdon
sumber
1
Perhatikan bahwa untuk turunan Ubuntu, info versi mungkin merujuk ke versi hilir (mis. Saya punya VERSION_ID = "18.3" dan VERSION_CODENAME = "sylvia" untuk kotak Mint saya). Namun, UBUNTU_CODENAME seharusnya benar.
Roger Lipscombe
Subshell adalah cara paling kuat untuk melakukan ini, kan?
JamesTheAwesomeDude
@JamesTheAwesomeDude mungkin, ya.
terdon
8

The lsb_releaseperintah mendukung -s(atau --short) pilihan untuk mencetak hanya informasi yang Anda minta dan tidak header yang mengatakan apa jenis informasi yang.

Untuk mendapatkan nomor versi saja sudah cukup untuk dijalankan:

lsb_release -sr

Sebagai contoh, pada Ubuntu 18.04 LTS, itu menghasilkan:

18.04

Seperti metode dalam jawaban WinEunuuchs2Unix , masih masuk akal untuk menggunakan substitusi perintah untuk menetapkan output ini ke variabel shell. Andaikan Anda menginginkan vervariabel untuk menyimpan nomor rilis:

ver="$(lsb_release -sr)"

Dengan -s, tidak perlu untuk mengurai nomor dengan cut, sed, grep, awk, bentuk-bentuk yang lebih kompleks dari ekspansi parameter , atau sejenisnya.

Dalam penggunaan ini, " "tanda kutip bersifat opsional, tetapi saya umumnya menyarankan untuk mengutip ekspansi parameter dan ekspansi shell lainnya kecuali jika ada alasan untuk tidak melakukannya.

Eliah Kagan
sumber
Ya terima kasih! Saya tidak pernah mengerti -s, tetapi Anda menjelaskannya dengan sempurna! Dihargai
a.mosallaei
5

lsb_releasePerintah pendek dan sederhana .

  • Untuk mencetak versi saja

    lsb_release -sr

    Keluaran:

    18.04
  • Untuk mencetak keterangan

    lsb_release -sd

    Keluaran:

    Ubuntu 18.04.2 LTS

Tentang bendera yang digunakan di sini:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Kulfy
sumber