Я пытаюсь создать скрипт, который требует, чтобы я напечатал кодовое имя debian, чтобы я мог отобразить его в файле sources.list.
Я пытаюсь заставить этот сценарий работать в любой версии Debian, поэтому я надеялся установить переменную bash с кодовым названием выпуска. Это было бы просто сделать (с помощью lsb_release -c), однако наши образы развертывания по умолчанию не содержат lsb_release - и поскольку этот скрипт необходим для исправления sources.list, установка lsb-release с помощью apt-get не подойдет ,
Я нашел множество способов узнать номер выпуска и другую информацию о системе, но не могу найти надежного места для получения кодового имени.
Благодарим за любую идею!
(ОС, с которой я тестирую это Debian Squeeze)
lsb_release
, проверьте его исходный код и посмотрите, готовы ли вы все это заново изобретатьОтветы:
Вы можете использовать
/etc/os-release
:источник
squeeze не поставляется с
/etc/os-release
, это мой «хак»:источник
Вы можете напечатать код вместе с номером версии Debian:
ИЛИ вы можете получить свое кодовое имя из числа и слова:
источник
awk -F= '/VERSION=/ {gsub(/"/,""); print $2}' /etc/os-release
awk -F"[=\"]+" '/VERSION=/ {print $2}' /etc/os-release
awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release
Вы можете получить код вашего дистрибутива Debian из
/etc/os-release
. Вместо того, чтобы пытаться проанализировать этот файл, вы можете найти его в новой среде, чтобы не влиять на текущую среду, и выполнитьecho
команду в этой новой среде.Чтобы сломать это:
env
: Запустить команду в новой среде.-i
: Не наследуйте переменные среды от существующей среды.bash
Запустите bash, чтобы у нас была оболочка для исходных файлов os-release и для запуска команды echo.-c
: Скажите, чтоbash
мы хотим выполнить команду, а не запускать интерактивную оболочку.. /etc/os-release
: Источник контентаos-release
в нашу новую среду.os-release
содержит несколько строк, устанавливающих переменные среды, и это установит эти переменные среды в нашей новой среде.;
: Разделите эту команду и выполните следующую команду.echo $VERSION_CODENAME
: Вывести кодовое имя, заданноеos-release
файлом.источник
echo "$(. /etc/os-release && echo $VERSION_CODENAME"
но заметил, что нет$VERSION_CODENAME
вstretch
. Очень грустные новости.echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"
что кажется правильным для моей задачи, но выглядит плохоДля systemd:
выход:
источник
Еще одна эвристика - посмотреть, откуда берутся пакеты для работающей в данный момент ОС.
Простой (и, вероятно, подверженный ошибкам) вариант:
Более надежный способ - проанализировать детали из вывода
apt-cache policy
(без дополнительных параметров):apt-cache policy
перечисляет все репозитории APT, используемые в локальной системе. Мы отфильтровываем те, которые происходят из Debian, которые помечены простоDebian
(то есть не помечены, напримерDebian debug
, например ), затем просматриваем только главный архив (неcontrib
илиnon-free
) и затем выбираем соответствующее значение.Еще более стабильный подход заключается в том, чтобы не полагаться на порядок элементов и найти
n=
значение в оставшейся строке:Еще одной возможностью было бы проанализировать
/var/lib/apt/lists/*Release
файлы самостоятельно вместо того, чтобы позволитьapt-cache
это сделать:источник
Мне нужно было добавить URL-адрес в sources.list. И чтобы иметь возможность динамически вводить кодовое имя версии, я использую этот фрагмент кода (полагаюсь на тот факт, что кодовое имя находится в скобках): вдохновлено ответом @PersianGulf .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g
источник
В продолжение ответа @Costas эта команда не работала для 16.04, где она возвращала полное имя «Xerial Xerus», но я хотел только «xerial», поскольку именно так репозиторий, который я пытался вытащить, разделял разные версии. Эта команда добавляет, что будет возвращено только первое слово и что оно будет все в нижнем регистре:
Это работает и для "Джесси"
источник
Только используя
grep
:Попробуйте (вывод на момент написания этого поста):
источник
этот может (или не может) быть альтернативным подходом к тому, что bcoca написал в Debian squeeze - я протестировал его Ubuntu 18.04:
источник