Jak rozpoznać wersję Ubuntu w systemie za pomocą skryptu .sh (bash)?

9

Próbuję więc utworzyć bash / plik wykonywalny i muszę znać numer wersji Ubuntu w systemie. Wszystkie sposoby, które znalazłem online, obejmują lsb_release -r, ale nie mogę wyprowadzić tego do zmiennej.

Czy jest jakiś sposób na pobranie aktualnej wersji Ubuntu i zapisanie jej jako zmiennej w pliku wykonywalnym powłoki?

a.mosallaei
źródło
Tak, doceniam to. Przepraszam, nie wiedziałem, że jest na to dokumentacja. Doceniam to
mimo wszystko
Tak, zrobiłem to. Dzięki
a.mosallaei

Odpowiedzi:

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

Powinien załatwić sprawę.

Dodaj tylko część liczbową:

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

Plik lsb-releasezmiennych

/usr/bin/lsb_releaseto skrypt w języku Python. Jest to krótki skrypt, który stanowi dobre wprowadzenie do języka python. Jak wspomnieli inni, istnieje krótszy sposób uzyskania tylko numeru wersji lsb_release -sr.

/etc/lsb-releasePlik definiuje zmienne środowiskowe z tej samej informacji dostarczonych przez lsb_release -akomendę:

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

Możesz dołączyć te zmienne środowiskowe w dowolnym momencie, używając . /etc/lsb-release. Aby przetestować w swoim terminalu:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
źródło
więc tak, dziękuję, działa, generuje Release: 18.04. Czy istnieje jednak sposób na uzyskanie numeru? Chcę móc używać tej zmiennej w funkcji if / else w skrypcie. Celem if / else jest pobranie poprawnej wersji mojej aplikacji dla dystrybucji ubuntu.
a.mosallaei
Ah nie ważne. @ user68186 rozwiązał mój problem. Dziękuję wam bardzo!
a.mosallaei
Chciałem napisać odpowiedź, ale pobiłaś mnie! :-) Cieszę się, że mogę pomóc.
user68186,
4
@ a.mosallaei słowo ostrzeżenia - jeśli używasz tylko części liczbowej i ignorujesz wszystko inne, ten skrypt będzie miał dziwne wyniki na dowolnej maszynie innej niż Ubuntu (w tym w wielu dystrybucjach opartych na Ubuntu, które są „kompatybilne” z Ubuntu ale mają własne nazwy i wersje); przed użyciem numeru może być konieczne sprawdzenie, czy wynik lsb_release zaczyna się od „Ubuntu”.
Peteris
1
@ a.mosallaei Mówisz, że Twój plik wykonywalny będzie używany tylko na komputerach Ubuntu. Skąd to wiesz? Lepiej mieć zabezpieczenie przed awarią, które kończy się, jeśli dystrybucją nie jest Ubuntu. Zaufaj mi, użytkownicy spróbują zawiesić Twój program.
Kryštof Píštěk
11

Alternatywą jest użycie /etc/os-releasepliku. Jest to sformatowane jako lista zmiennych powłoki:

$ 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

Tak więc łatwym sposobem analizowania jest po prostu sourceplik:

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

Aby uniknąć niepotrzebnego ustawiania wszystkich tych zmiennych, możesz pobrać plik w podpowłoce , powtórzyć potrzebną zmienną i wyjść z podpowłoki:

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

Alternatywnie, zawsze możesz po prostu parsować plik bezpośrednio:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
terdon
źródło
1
Zauważ, że w przypadku pochodnych Ubuntu informacje o wersji mogą odnosić się do dalszej wersji (np. Mam VERSION_ID = „18.3” i VERSION_CODENAME = „sylvia” dla mojego mennicy). UBUNTU_CODENAME powinien być poprawny.
Roger Lipscombe
podpowłoka jest najbardziej niezawodnym sposobem na zrobienie tego, prawda?
JamesTheAwesomeDude
@JamesTheAwesomeDude prawdopodobnie tak.
terdon
8

lsb_releaseKomenda obsługuje -s(lub --short) opcję drukowania tylko informacje można poprosić i nie nagłówek, który mówi, jaki rodzaj informacji, że jest.

Aby uzyskać tylko numer wersji, wystarczy uruchomić:

lsb_release -sr

Na przykład w systemie Ubuntu 18.04 LTS, który wyświetla:

18.04

Podobnie jak w przypadku metody zawartej w odpowiedzi WinEunuuchs2Unix , nadal uzasadnione jest użycie substytucji poleceń w celu przypisania tego wyniku do zmiennej powłoki. Załóżmy, że chcesz, aby verzmienna zawierała numer wydania:

ver="$(lsb_release -sr)"

Ze -snie ma potrzeby analizowania na numer z cut, sed, grep, awk, bardziej złożonych form interpretacji parametrów , lub tym podobne.

W tym zastosowaniu " "cytaty są opcjonalne, ale ogólnie sugeruję cytowanie rozszerzenia parametrów i innych rozszerzeń powłoki, z wyjątkiem przypadków, gdy istnieje powód, aby tego nie robić.

Eliah Kagan
źródło
Tak dziękuję! Nigdy nie zrozumiałem -s, ale wyjaśniłeś to doskonale! Doceniony
a.mosallaei,
5

Krótkie i proste lsb_releasepolecenia.

  • Aby wydrukować tylko wersję

    lsb_release -sr

    Wynik:

    18.04
  • Aby wydrukować opis

    lsb_release -sd

    Wynik:

    Ubuntu 18.04.2 LTS

O używanych tutaj flagach:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Kulfy
źródło