Wie können Sie die Version von Ubuntu auf einem System in einem .sh (bash) -Skript erkennen?

9

Ich versuche also, eine Bash / ausführbare Datei zu erstellen, und ich muss die Versionsnummer von Ubuntu auf dem System kennen. Alle Möglichkeiten, die ich online gefunden habe, bestehen aus lsb_release -r, ich kann dies jedoch nicht in eine Variable ausgeben.

Gibt es eine Möglichkeit, die aktuelle Version von Ubuntu abzurufen und als Variable in einer ausführbaren Shell-Datei zu speichern?

a.mosallaei
quelle
Ja, ich weiß es zu schätzen. Entschuldigung, ich wusste nicht, dass es Dokumentation dazu gibt. Ich schätze es
trotzdem
Ja, ich habe es geschafft. Vielen Dank
a.mosallaei

Antworten:

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

Sollte den Trick machen.

Fügen Sie für den numerischen Teil nur Folgendes hinzu:

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

Die lsb-releaseVariablendatei

/usr/bin/lsb_releaseist ein Python-Skript. Es ist ein kurzes Skript, das als gute Einführung in die Python-Sprache dient. Wie bereits erwähnt, ist ein kürzerer Weg, um nur die Versionsnummer zu erhalten, mit lsb_release -sr.

Die /etc/lsb-releaseDatei definiert Umgebungsvariablen mit denselben Informationen, die vom lsb_release -aBefehl bereitgestellt werden :

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

Sie können diese Umgebungsvariablen jederzeit mit einschließen . /etc/lsb-release. So testen Sie in Ihrem Terminal:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
quelle
Also ja, danke, es funktioniert, es gibt aus Release: 18.04. Gibt es jedoch eine Möglichkeit, nur die Nummer zu erhalten? Ich möchte diese Variable in einer if / else-Funktion im Skript verwenden können. Der Zweck des if / else ist es, die richtige Version meiner Anwendung für die Distribution von Ubuntu herunterzuladen.
a.mosallaei
Ah vergiss es. @ user68186 hat mein Problem gelöst. Vielen Dank!
a.mosallaei
Ich wollte die Antwort schreiben, aber du hast mich geschlagen! :-) Gerne trage ich dazu bei.
user68186
4
@ a.mosallaei ein Wort der Vorsicht - wenn Sie nur den Zahlenteil verwenden und alles andere ignorieren, wird dieses Skript auf jedem Nicht-Ubuntu-Computer (einschließlich vieler Ubuntu-basierter Distributionen, die Ubuntu-kompatibel sind) seltsame Ergebnisse erzielen. aber haben ihre eigenen Namen und Versionierung); Möglicherweise müssen Sie überprüfen, ob das Ergebnis von lsb_release mit "Ubuntu" beginnt, bevor Sie die Nummer verwenden.
Peteris
1
@ a.mosallaei Sie sagen, dass Ihre ausführbare Datei nur auf Ubuntu-Computern verwendet wird. Wie kannst du das Wissen? Es ist besser, eine Ausfallsicherheit zu haben, die beendet wird, wenn die Distribution nicht Ubuntu ist. Vertrauen Sie mir, Benutzer werden versuchen, Ihr Programm zum Absturz zu bringen.
Kryštof Píštěk
11

Eine Alternative besteht darin, /etc/os-releasestattdessen die Datei zu verwenden. Dies ist als Liste von Shell-Variablen formatiert:

$ 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

Eine einfache Möglichkeit zum Parsen besteht darin, einfach sourcedie Datei zu erstellen:

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

Um zu vermeiden, dass alle diese Variablen unnötig festgelegt werden, können Sie die Datei in einer Subshell als Quelle angeben , die benötigte Variable wiedergeben und die Subshell beenden:

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

Alternativ können Sie die Datei jederzeit direkt analysieren:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
Terdon
quelle
1
Beachten Sie, dass sich die Versionsinformationen für Ubuntu-Derivate möglicherweise auf die Downstream-Version beziehen (z. B. habe ich VERSION_ID = "18.3" und VERSION_CODENAME = "sylvia" für meine Mint-Box). UBUNTU_CODENAME sollte jedoch korrekt sein.
Roger Lipscombe
Subshell ist der robusteste Weg, dies zu tun, oder?
JamesTheAwesomeDude
@ JamesTheAwesomeDude wahrscheinlich, ja.
Terdon
8

Der lsb_releaseBefehl unterstützt eine -s(oder --short) Option, um nur die Informationen zu drucken, nach denen Sie fragen, und nicht den Header, der angibt, um welche Art von Informationen es sich handelt.

Um nur die Versionsnummer zu erhalten, reicht es daher aus, Folgendes auszuführen:

lsb_release -sr

Unter Ubuntu 18.04 LTS gibt das beispielsweise Folgendes aus:

18.04

Wie bei der Methode in der Antwort von WinEunuuchs2Unix ist es immer noch sinnvoll, die Befehlssubstitution zu verwenden, um diese Ausgabe einer Shell-Variablen zuzuweisen. Angenommen, Sie möchten, dass die verVariable die Versionsnummer enthält:

ver="$(lsb_release -sr)"

Mit -s, gibt es keine Notwendigkeit , mit der Zahl parsen cut, sed, grep, awk, komplexere Formen des Parameter Expansion oder dergleichen.

In dieser Verwendung sind die " "Anführungszeichen optional, aber ich empfehle im Allgemeinen, die Parametererweiterung und andere Shell-Erweiterungen anzugeben, es sei denn, es gibt einen Grund, dies nicht zu tun.

Eliah Kagan
quelle
Ja Dankeschön! Ich habe das -s nie verstanden, aber du hast es perfekt erklärt! Geschätzt
a.mosallaei
5

Kurze und einfache lsb_releaseBefehle.

  • Nur zum Drucken der Version

    lsb_release -sr

    Ausgabe:

    18.04
  • Beschreibung drucken

    lsb_release -sd

    Ausgabe:

    Ubuntu 18.04.2 LTS

Über die hier verwendeten Flags:

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