Яка різниця між "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. Вибачте, але на сайтах Stack Exchange я побачив кілька дурних помилок m4 в аншері з дуже високими балами.
AnFi

... і так це означає, що якщо я хочу, щоб явна опція конфігурації набула чинності, вона НЕ повинна мати dnlабо dnl #перед нею ...? і я хочу завжди закінчувати це dnl?
Майк Б

@ AndrzejA.Filip Спасибі Сайт не дозволив мені редагувати питання, тому я його повторно додав.
Майк Б

3

DNL означає "видалити через новий рядок", що насправді означає "ігнорувати все після 'dnl' до наступного рядка".

"Dnl #" - це просто штучна номенклатура. Коли файл sendmail.mc був вперше розроблений, вони хотіли, щоб ви знали, що все, що було "dnl ..." - це команда / настройка, яку коментують, і все, що було "dnl # ...", було насправді описовим коментарем, що не була команда / настройка, яку не можна коментувати, оскільки "#" часто використовується на початку рядка для позначення "те, що слід до кінця рядка" - це коментар.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.