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

10

В чем разница между 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
Майк Б
источник

Ответы:

16

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

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

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

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

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

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

Майкл Хэмптон
источник
1
Вам не нужно заканчивать строку, dnlно вы получите дополнительные пустые строки sendmail.cf. И да, если вы хотите, чтобы что-то вступило в силу, оно на самом деле должно присутствовать в sendmail.cf...
Майкл Хэмптон
1
@MikeB m4 чувствителен к регистру - DNLнет dnl. Извините, но я видел несколько глупых ошибок m4 в ответах с очень высокими показателями на сайтах Stack Exchange.
AnFi
... и это означает, что если я хочу, чтобы явный параметр конфигурации вступил в силу, он НЕ должен иметь dnlили находиться dnl #перед ним ...? и я хочу всегда заканчивать это с DNL?
Майк Б
@ AndrzejA.Filip Спасибо. Сайт не позволил мне отредактировать вопрос, поэтому я добавил его снова.
Майк Б
3

DNL означает «удалить через новую строку», что на самом деле означает «игнорировать все после« dnl »до следующей строки».

«Dnl #» - это просто искусственная номенклатура. Когда файл sendmail.mc был впервые разработан, они хотели, чтобы вы знали, что все, что было «dnl ...», было командой / параметром, которое было закомментировано, а все, что было «dnl # ...», было действительно описательным комментарием, который не была командой / параметром, который можно было бы раскомментировать, потому что «#» часто используется в начале строки, чтобы указать, что «то, что следует до конца строки», является комментарием.

TekOps
источник