Почему директивы #include и #includedir в sudo имеют префикс pound (#)

36

При настройке sudoсреды я заметил, что директива include имеет префикс pound (#).

Солярис показывает это как:

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

В руководстве (как для Linux, так и для Solaris) говорится:

Включение других файлов изнутри sudoers Можно включить другие файлы sudoers из файла sudoers, который в настоящее время анализируется, используя директивы #include и #includedir.

А также:

Другие специальные символы и зарезервированные слова Знак фунта (`# ') используется для обозначения комментария (если только он не является частью директивы #include или если он не встречается в контексте имени пользователя и сопровождается одной или несколькими цифрами, в этом случае это рассматривается как UID). И символ комментария, и любой текст после него, вплоть до конца строки, игнорируются.

Кто-нибудь знает, почему был сделан выбор использовать символ решетки в директивах #includeand #includedir?

В качестве примечания: я часто использую что-то вроде egrep -v '^#|^$' configfileполучения нестандартных / активных настроенных настроек, и это, очевидно, не работает для sudoersфайла.

Ламберт
источник

Ответы:

38

#includeбыл добавлен в 2004 году . Это должно было быть совместимо с тем, что уже было там. Я не думаю, что include /path/to/fileэто было бы двусмысленно, хотя, возможно, было бы немного сложнее разобрать, потому что синтаксический анализатор должен был бы отличить include /path/to/file(включить директиву) от include = foo(позволить пользователю includeвыполнить команду foo).

Но я думаю, что в основном причина была в том, чтобы выглядеть как препроцессор C, который руководство явно приводит в качестве вдохновения.

Жиль "ТАК - прекрати быть злым"
источник
1
Хороший улов и объяснение, к сожалению, эти объяснения удалены из руководств (по крайней мере, для Ubuntu, RedHat, OpenBSD и Solaris).
Ламберт
2
Первый раз, когда я анализировал свой sudoersфайл, я подумал, includeчто это директива и закомментирована#include директива . Правило малейшего удивления нарушается жестко. На мой взгляд это плохой дизайн.
Камиль Мачоровский