Как получить полное кодовое имя дистрибутива Ubuntu?

#! называется shebang, когда он встречается как начальные два символа в начальной строке скрипта. Он используется в сценариях для указания интерпретатора для выполнения. [F3] для операционной системы (ядра), а не для оболочки; поэтому он не будет интерпретироваться как комментарий.

Предоставлено: http://en.wikipedia.org/wiki/Shebang_%28Unix%29

В общем случае, если файл является исполняемым, но фактически не исполняемой (двоичной) программой, и такая строка присутствует, программа, указанная после #! запускается с именем сценария и всеми его аргументами. Эти два символа # и! должны быть первые два байта в файле!

Предоставлено: http://en.wikipedia.org/wiki/Shebang_%28Unix%29

1
задан 19 April 2014 в 18:05

6 ответов

Мой вариант на том, что уже было предложено:

. /etc/os-release; echo ${VERSION/*, /}

Самый короткий, самый быстрый ответ на сегодняшний день.

Если вы не хотите загружать содержимое /etc/os-release в ваша текущая среда, вы можете подделать bash, думая, что загружает сценарий довольно легко:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')
7
ответ дан 24 May 2018 в 09:15
  • 1
    Как вы смеете сказать bashier, чем что-либо еще на сегодняшний день ? есть другие полные ответы bash здесь :D. – gniourf_gniourf 19 April 2014 в 16:19
  • 2
    Почему нисходящий? это хороший ответ (хотя ничто концептуально не отличается от других, представленных перед ним). – gniourf_gniourf 19 April 2014 в 16:21
  • 3
    Хех, умное использование замещения процесса, +1. – terdon♦ 19 April 2014 в 16:29
  • 4
    как можно было бы ожидать от мастера @terdon :) – Rinzwind 19 April 2014 в 16:29
  • 5
    Простая подоболочка также выполнила бы эту задачу: ( . /etc/os-release && echo ${VERSION/*, /} ). – gniourf_gniourf 19 April 2014 в 16:37

Grep:

$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr

Пояснение:

lsb_release -rs -> Распечатывает вашу установленную версию Ubuntu. grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> Захватите все строки, содержащие вашу версию релиза, в моем случае это 14.04. grep -m 1 "Description: Ubuntu " -> Снова захватывает только совпадающую первую строку (из-за флага -m), который содержит строку Description: Ubuntu. cut -d "'" -f2 -> печатает поле номер 2 в соответствии с отдельной цитатой разделителя '

Awk:

$ awk -v var=$(lsb_release -rs) '$3~var {print $4" "$5;exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr

Объяснение:

Объявление и назначение Переменная в awk выполняется с помощью параметра -v. Значению команды lsb_release -rs присваивается переменная var, которая inturn помогает распечатать поле 4, поле 5 из строк содержит строку 14.04 и существует, если ее нашел один. Наконец, команда cut помогает удалить одинарные кавычки.

5
ответ дан 24 May 2018 в 09:15

Команда, которую вы ищете, это:

grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release

Это очень уродливо и не оптимизировано. Я уверен, что должен быть более простой метод, и у него есть некоторые проблемы.

3
ответ дан 24 May 2018 в 09:15
[F1]
1
ответ дан 24 May 2018 в 09:15
  • 1
    Вам все равно нужно удалить цифры, см. Ниже ответ @ gniourf_gniourf, который использует точно такой же подход. – terdon♦ 19 April 2014 в 16:18

Вот еще несколько вариантов. Все они анализируют файл /etc/os-release, который в моем 13.10 выглядит так:

NAME="Ubuntu"
VERSION="13.10, Saucy Salamander"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 13.10"
VERSION_ID="13.10"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

Все приведенные ниже решения будут анализировать вторую строку для создания Saucy Salamander.

] grep
grep -oP 'VERSION=.* \K\w* \w*' /etc/os-release
-o означает «распечатать только соответствующую часть строки», а функция -P позволяет использовать регулярные выражения, совместимые с Perl. Это позволяет нам использовать \K, который отбрасывает все, что было сопоставлено с этой точкой, что в сочетании с -o означает «печатать только то, что соответствует после \K. Таким образом, фактическое регулярное выражение будет соответствовать последним двум словам строка, содержащая VERSION=. awk
awk -F'[" ]' '/VERSION=/{print $3,$4}'  /etc/os-release
Установка разделителя полей в " и space означает, что 3-го и 4-го полей строки, содержащей VERSION=, являются следующей строкой. sed
sed -nr '/VERSION=/{s/.* (\w* \w*)"/\1/;p}' /etc/os-release
Переключатель -n подавляет нормальный выход, строки не будут напечатаны. -r позволяет использовать расширенные регулярные выражения. Затем в строках, соответствующих VERSION=, мы удалим все, кроме двух последних слов. p ] в конце означает печать. perl
perl -lne '/VERSION=.*\b(\w+ \w+)/ && print $1' /etc/os-release
-n означает «обрабатывать каждую строку ввода со сценарием, заданным -e». [F29] добавляет символ новой строки для каждого вызова печати (и некоторые другие вещи, которые здесь не представлены). Регулярное выражение соответствует последним двум словам (\b является границей слов) и печатает их, если строка содержит VERSION=. coreutils
grep VERSION= /etc/os-release | cut -d ' ' -f 2-  | tr -d '"' 
Здесь мы просто grep соответствующую строку и используем cut, устанавливая разделитель полей на space (-d ' ') и печатая все, начиная со второго поля до конца строки. Команда tr -d удалит " с конца. Чистая оболочка (бесстыдно воровство @ умная идея source gniourf_gniourf):
. /etc/os-release && echo ${VERSION//[0-9,. ]/ }
. источник файла, который делает переменные доступными для оболочки, и я использую возможности манипуляции с bash для удаления номеров версий.
1
ответ дан 24 May 2018 в 09:15

С помощью regex вы можете сделать это:

grep 'VERSION' /etc/os-release | grep -oP "[a-zA-Z]+ [a-zA-Z]+"

Объяснение:

Это ищет строку с VERSION в файле /etc/os-release. Затем он находит 2 последовательных слова, разделенных пробелом (регулярное выражение Perl). Флаг -o сохраняет только то, что соответствует поиску.

Вы должны использовать [a-zA-Z] вместо `w`, чтобы не включать цифры.

0
ответ дан 24 May 2018 в 09:15

Другие вопросы по тегам:

Похожие вопросы: