Какое форматирование разрешено для системных опций вообще?

Сейчас я пишу некоторые файлы службы systemd и задаюсь вопросом о том, что позволяет правильно форматировать их содержимое, чтобы я мог улучшить читаемость и тому подобное для меня. Вопрос в том, смогу ли я вообще реализовать какой-то стиль кода.

До сих пор я читал о поддержке комментариев, что некоторые опции поддерживают пробелы, например, список значений, и что \ может использоваться для объединения нескольких строк. Это довольно много, как общие советы. То, что я не читал, - это полная документация о самих парах ключ-значение, например, если разрешено ставить пробелы или символы табуляции перед / после имени ключа и перед значением для отступа строк и всего такого.

Ниже приводится один пример того, что я спрашиваю себя:

[Unit]
Description=some pretty long description \
            spanning multiple lines
RequiresMountsFor=/tmp

против

[Unit]
Description       = some pretty long description \
                    spanning multiple lines
RequiresMountsFor = /tmp

против

[Unit]
    Description       = some pretty long description \
                        spanning multiple lines
    RequiresMountsFor = /tmp

Доступны ли какие-либо документы, описывающие возможные варианты форматирования параметров? Или отсутствие такого уже признака того, что я хотел бы получить, вообще невозможно? Остальное будет задокументировано на странице руководства...

2 ответа

Решение

По состоянию на апрель 2016 года нет формального определения синтаксиса.


Я думаю, что в документации лучше всего подойдет эта строка:

Синтаксис основан на спецификации XDG Desktop Entry. .desktop файлы, которые в свою очередь вдохновлены Microsoft Windows .ini файлы.

...

Обратите внимание, что использование нескольких присваиваний одному значению делает файл модуля несовместимым с синтаксическими анализаторами для XDG. .desktop формат файла.

Оттуда мы можем перейти к разделу, описывающему "основной формат файла", который утверждает:

Записи

Записи в файле {key,value} пары в формате:

Key=Value

Пробел до и после знака равенства следует игнорировать; = знак является фактическим разделителем.

Только персонажи A-Za-z0-9- может использоваться в именах ключей.

В зависимости от обстоятельств, ключи Name а также NAME не эквивалентны.

Несколько ключей в одной группе могут не иметь одно и то же имя. Ключи в разных группах могут иметь одинаковые имена.

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


Ты можешь использовать systemd-analyze verify <file> проверить ваши файлы модуля. https://github.com/systemd/systemd/issues/3677

Я бы посетил systemd Страница man в вашей системе. Формат, кажется, указан в разделе 5, см. Здесь. Вы можете вызвать это, например, man 5 systemd,

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