Где документация для [x $ feature_… = xy] в grub.cfg?

Я не могу найти никаких ссылок на x $ feature ... с помощью Google поскольку он покажет мне примеры grub.cfg.

В самогенерируемом файле grub.cfg много

if [ x$feature_platform_search_hint = xy ] ...

if [ x$feature_default_font_path = xy]...

if [ x$feature_all_video_module = xy ]...

Насколько я понимаю, он проверяет, присутствует ли функция. Где я могу найти каждую доступную функцию с описанием.

Я предполагаю, что «ху» означает что-то вроде истинного или доступного. Какие еще значения у вас могут быть?

Изменить: мне нужно знать только переменные, доступные в grub.cfg. Желательно документацию.

4
задан 5 October 2016 в 09:31

3 ответа

Синтаксис описан в руководство GRUB как "синтаксис, весьма схожий с тем из Bash GNU и других производных Оболочки Bourne". Заключение в кавычки и переменная работа расширения, подобная как в оболочке. Открывающая скобка" [" является синонимом для GRUB , тестируют встроенную команду .

, список функций ведется как features глобальная переменная в normal/main.c . feature_platform_search_hint было доступно начиная с GRUB 2.00 (выпущенный 2012). Таким образом, условная проверка кода эту функцию бессмысленна во всех современных дистрибутивах Linux.

Во время этой записи, последняя добавленная опция была feature_timeout_style, доступна с тех пор 2.02-beta1.

0
ответ дан 1 December 2019 в 09:46

Строго говоря, мудрое выражение, if [ x$feature_platform_search_hint = xy ] не имеет никакого отношения grub, это - выражение оболочки, чтобы быть интерпретированным оболочкой. grub использует его в одном из, его - сценарий помощника, вот именно.

if [ x$feature_platform_search_hint = xy ] в основном тестирует если переменная feature_platform_search_hint расширен до y.

Как?

[ синоним для команды test (может быть встроенная оболочка или внешняя команда), используемый для оценки выражений.

В if [ x$feature_platform_search_hint = xy ]:

  • [ тестирует ли строки x$feature_platform_search_hint и xy то же

  • здесь x заполнитель, фиктивная строка, существует с обеих сторон

  • переменная $feature_platform_search_hint расширен сначала, значение добавляется к уже существующей строке x, и затем строка на левом сравнивается со строкой справа от =

  • В действительности это обязательно проверяет если переменная feature_platform_search_hint имеет значение y

  • Здесь x используется так, чтобы если переменная feature_platform_search_hint сброшен или пустой указатель, затем [ выйдет с ошибкой как = требует аргумента и на стороне, и без feature_platform_search_hint, это станет:

    if [ = y ]
    

    использование x получает нас, синтаксически исправляют использование в этом случае:

    if [ x = xy ]
    

Обратите внимание, что, нужно вместо этого использовать -z тест (который тестирует, если строка имеет нулевую длину), или -n тест (ненулевой тест длины), какой бы ни подходит лучше всего:

if [ -n "$feature_platform_search_hint" ]
if [ -z "$feature_platform_search_hint" ] 

Нужно также заключить переменные в кавычки (хотя строго не необходимый в этом случае, поскольку, по-видимому, автор намеревался определить/перезаписать переменную только в сценарии):

if [ x"$feature_platform_search_hint" = xy ]
4
ответ дан 1 December 2019 в 09:46

feature_platform_search_hint (и другие), и подобный оболочке синтаксис функция normal модуль в grub. Синтаксис несколько документируется в руководство GRUB - хотя я не мог найти документацию для [] Язык сценария, "очевидно", смоделирован после удара, поскольку он резервирует слова, используемые в ударе даже если еще реализованный (такой как [[) и реализации bashisms такой как function.

Предварительно определенные переменные такой как feature_platform_search_hint hardcoded в нормальном модуле во время изготовления и чрезвычайно не документирован кроме путем изучения исходного кода. В текущих версиях grub, эти переменные определяются, чтобы быть y в любом случае, таким образом, эти переменные, кажется, указывают на поддержку определенных функций данной версии личинки, и тестирование их может быть сделано для записи grub.cfg файлы, которые работают с несколькими версиями личинки.

Например, feature_platform_search_hint=y кажется, указывает, что поисковая команда поддерживает --hint-bios, --hint-efi и так далее переключатели, в то время как отсутствие этой переменной могло бы указать на версию grub это не поддерживает эти переключатели, таким образом, Вы не должны пытаться выполнить a search оператор с помощью них для предотвращения синтаксических ошибок.

Существует много догадки, и "может" в моем ответе, поскольку все это, кажется, чрезвычайно не документировано.

0
ответ дан 1 December 2019 в 09:46

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

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