Sự khác biệt giữa những thứ khác nhau và một trong những tập tin sendmail.mc là gì?


10

Sự khác biệt giữa dnldnl #trong một /etc/mail/sendmail.mctập tin là gì? Nếu tôi muốn kích hoạt một cái gì đó cần phải ở phía trước? Tương tự như vậy, nếu tôi muốn "bình luận" một cái gì đó, tôi cần tiền tố gì?

Ví dụ:

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

Câu trả lời:


16

Có một sự khác biệt tinh tế nhưng quan trọng giữa dnl#ở đây.

dnlcó nghĩa là "xóa qua dòng mới" . Khi bạn xử lý của bạn sendmail.mcthành một sendmail.cfsử dụng m4(hoặc có thể một số frontend), các nhân vật dnlvà tất cả mọi thứ sau đó, bao gồm cả các dòng mới tiếp theo, sẽ bị loại bỏ. (Và tất cả các dòng đó kết thúc bằng dnlđể loại bỏ các dòng trống bổ sung trong sendmail.cfđầu ra.)

Không có gì bắt đầu từ đầu dnlđến cuối dòng sẽ làm cho nó ra sendmail.mcvà vào sendmail.cf.

Tất cả mọi thứ còn lại trong đầu ra, tất nhiên, sẽ là cấu hình sendmail, hoặc một nhận xét bắt đầu bằng #, sẽ được sao chép nguyên trạng sendmail.cf, trong đó chúng sẽ bị bỏ qua.

Bất cứ điều gì bắt đầu với #và không bị xóa ở trên sẽ làm cho nó sendmail.cfkhông bị biến đổi như một bình luận.

Trong ví dụ của bạn, một người nào đó có nghĩa là tất cả các tính năng được nhận xét sẽ bị xóa khỏi sendmail.cf, cũng như các nhận xét, vì các nhận xét sẽ là vô nghĩa nếu không có các tính năng hiện tại.


1
Bạn không phải kết thúc một dòng với dnlnhưng cuối cùng bạn sẽ có thêm các dòng trống sendmail.cf. Và vâng, nếu bạn muốn một cái gì đó có hiệu lực, nó thực sự phải có mặt trong sendmail.cf...
Michael Hampton

1
@MikeB m4 phân biệt chữ hoa chữ thường - DNLkhông phải dnl. Xin lỗi nhưng tôi đã thấy một vài lỗi m4 ngu ngốc khi trả lời với số điểm rất cao trong các trang web Stack Exchange.
AnFi

... và điều đó có nghĩa là nếu tôi muốn một tùy chọn cấu hình rõ ràng có hiệu lực thì nó KHÔNG phải có dnlhoặc dnl #ở phía trước nó ...? và tôi sẽ luôn muốn kết thúc nó với dnl?
Mike B

@ AndrzejA.Filip Cảm ơn. Trang web sẽ không cho phép tôi chỉnh sửa câu hỏi vì vậy tôi đã thêm lại nó.
Mike B

3

DNL có nghĩa là "xóa qua dòng mới" có nghĩa là "bỏ qua mọi thứ sau 'dnl' cho đến dòng tiếp theo".

"Dnl #" chỉ là danh pháp nhân tạo. Khi tệp sendmail.mc được phát triển lần đầu tiên, họ muốn bạn biết rằng bất cứ điều gì "dnl ..." là một lệnh / cài đặt đã được nhận xét và bất cứ điều gì "dnl # ..." thực sự là một nhận xét mô tả rằng không phải là một lệnh / cài đặt có thể không bị thiếu vì '#' thường được sử dụng ở đầu dòng để cho biết "những gì tiếp theo cho đến cuối dòng" là một nhận xét.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.