В чем разница между “dnl” и “dnl #” в файле sendmail.mc?

Вопрос или проблема

В чем разница между dnl и dnl # в файле /etc/mail/sendmail.mc? Если я хочу что-то включить, что должно быть перед ним? Аналогично, если я хочу сделать “комментарий”, какой префикс мне нужен?

Например:

dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(foo.com)dnl
dnl MASQUERADE_DOMAIN(foo2.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl

Здесь есть тонкая, но важная разница между dnl и #.

dnl означает “удалить до конца строки”. Когда вы преобразовываете ваш sendmail.mc в sendmail.cf используя m4 (или, возможно, другой интерфейсный инструмент), символы dnl и все после них, включая следующий перевод строки, будут удалены. (И все эти строки заканчиваются на dnl, чтобы предотвратить появление пустых строк в выводе sendmail.cf.)

Ничего, что начинается с dnl до конца строки, не попадет из sendmail.mc в sendmail.cf.

Все, что останется в выводе, конечно же, либо будет конфигурацией sendmail, либо комментарием, начинающимся с #, который будет скопирован как есть в sendmail.cf и будет игнорироваться.

Все, что начинается с # и не было удалено выше, будет внесено в sendmail.cf как комментарий.

В вашем примере кто-то намеревался удалить все комментированные функции из sendmail.cf, а также комментарии, поскольку комментарии были бы бессмысленны без присутствия функций.

dnl означает “удалить до конца строки”, что действительно означает “игнорировать все после ‘dnl’ до следующей строки”.

“dnl #” — это просто искусственная номенклатура. Когда файл sendmail.mc был впервые разработан, хотели, чтобы вы знали, что все, что было “dnl …”, это была команда/настройка, которая была закомментирована, а все, что было “dnl #…”, действительно было описательным комментарием, который не мог быть раскомментирован, потому что ‘#’ часто используется в начале строки, чтобы указать, что “то, что следует до конца строки” — это комментарий.

Да, прошло 8 лет, и никто это не прочитает, но я просто хотел указать, что размещение двух dnl на строке совершенно бессмысленно. Это не “предотвращает появление дополнительных пустых строк в выводе sendmail.cf“, как было предложено выше.

Поскольку картинка стоит тысячи слов:

$ m4 <

Оно производит такой вывод:

Line 1
Line 3
Line 5
# Line 6
Line 7
Line 9

Ответ или решение

Вопрос о различии между dnl и dnl # в файле sendmail.mc имеет немалое практическое значение для системных администраторов и специалистов в области ИТ. Эти конструкции играют важную роль в конфигурации сервера Sendmail, поэтому важно понять их функциональность и область применения.

Различия между dnl и dnl # в файле sendmail.mc

  1. dnl (Delete to New Line)

    Использование dnl означает, что все символы, начиная с dnl и далее, до конца строки включительно, будут проигнорированы при преобразовании файла sendmail.mc в sendmail.cf с помощью инструмента макропроцессора m4. Это позволяет удалить из конфигурации как сами команды, так и комментарии, которые к ним относятся, чтобы они не попадали в итоговый файл конфигурации sendmail.cf.

  2. dnl #

    Конструкция dnl # в некоторой степени является искусственным приемом. Здесь dnl выполняет ту же функцию удаления до конца строки, а # символизирует, что содержание строки — это комментарий. Концептуально, использование dnl # вместо просто dnl создано для более ясного различия между закомментированными командами и комментариями, которые объясняют, зачем те или иные команды закомментированы.

Комментарии и их роль

  • Записи, начинающиеся с dnl, полностью удаляются при обработке: Это означает, что данные строки вообще не окажутся в sendmail.cf.

  • Комментарии с #: Все, что начинается с # и не обработано посредством удаления dnl, будет скопировано в sendmail.cf. Эти комментарии, хотя и присутствуют в итоговом файле, будут игнорироваться сервером Sendmail.

Правильное использование

  • Если вы хотите активировать функциональность, необходимо удалить dnl перед нужной командой, чтобы она была включена в sendmail.cf.

  • Если необходимо "закомментировать" строку, следует добавить dnl перед ней. Это гарантирует, что строка будет проигнорирована в итоговом файле конфигурации.

Подводя итог, использование dnl способствует более гибкому управлению конфигурацией Sendmail, позволяя системным администраторам четко удалять или включать функциональность в зависимости от текущих нужд конфигурации. Понимание этой разницы поможет избежать ошибок и обеспечить корректную работу вашей почтовой системы.

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

Оцените материал
Добавить комментарий

Капча загружается...