Як ви можете сказати версію Ubuntu в системі в .sh (bash) скрипті?


9

Тому я намагаюся створити bash / виконуваний файл, і це в мені потрібно знати номер версії 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. Це короткий скрипт, який служить хорошим вступом до мови 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 - завантажити правильну версію моєї програми для дистрибутива ubuntu.
a.mosallaei

Ах неважливо. @ user68186 вирішив мою проблему. Дякую вам, хлопці!
a.mosallaei

Я збирався написати відповідь, але ви перемогли мене! :-) Я радий зробити свій внесок.
user68186

4
@ a.mosallaei - слово обережності - якщо ви просто використовуєте числову частину і ігноруєте все інше, цей сценарій матиме дивні результати на будь-якій машині, що не працює Ubuntu (включаючи безліч дистрибутивів на основі Ubuntu, які Ubuntu "сумісні" але мають власні імена та версії); Вам може знадобитися перевірити, чи результат lsb_release починається з "Ubuntu", перш ніж використовувати номер.
Петеріс

1
@ a.mosallaei Ви говорите, що ваш виконуваний файл буде використовуватися лише на комп'ютерах Ubuntu. Як ви знаєте, що? Краще мати аварійну безпеку, яка виходить, якщо дистрибутив не є Ubuntu. Повірте, користувачі намагатимуться зірвати вашу програму.
Kryštof Píš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

Щоб уникнути необхідності встановлення всіх цих змінних, ви можете надсилати файл у підшалі , повторювати потрібну змінну та виходити з підкашлю:

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

нижня оболонка - це найбільш надійний спосіб зробити це, правда?
JamesTheAwesomeDude

@JamesTheAwesomeDude напевно, так.
тердон

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, складнішими формами розширення параметрів , або тому подібними.

У цьому використанні " "лапки є необов'язковими, але я, як правило, пропоную цитувати розширення параметрів та інші розширення оболонок, за винятком випадків, коли немає причини.


Так дякую! Я ніколи не розумів -і, але ви це прекрасно пояснили! Оцінено
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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.