Warum wird den Anweisungen #include und #includedir in sudo das Pfundzeichen (#) vorangestellt?

36

Beim Einrichten einer sudoUmgebung ist mir aufgefallen, dass der include-Direktive das Nummernzeichen (#) vorangestellt wird.

Solaris zeigt dies als:

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

Das Handbuch (Linux sowie Solaris) besagt:

Andere Dateien aus sudoers einbeziehen Es ist möglich, andere sudoers-Dateien aus der sudoers-Datei, die gerade analysiert wird, mit den Anweisungen #include und #includedir einzubeziehen.

Und:

Sonstige Sonderzeichen und reservierte Wörter Das Nummernzeichen (`# ') kennzeichnet einen Kommentar (sofern er nicht Teil einer # include-Direktive ist oder im Kontext eines Benutzernamens vorkommt und von einer oder mehreren Ziffern gefolgt wird). In diesem Fall wird es als UID behandelt. Sowohl das Kommentarzeichen als auch der darauf folgende Text bis zum Zeilenende werden ignoriert.

Weiß jemand, warum die Wahl getroffen wurde, das Pfundzeichen in den Anweisungen #includeund zu verwenden #includedir?

Als Randnotiz: Ich verwende oft etwas egrep -v '^#|^$' configfile, um die nicht standardmäßigen / aktiven konfigurierten Einstellungen zu erhalten, und dies funktioniert offensichtlich nicht für die sudoersDatei.

Lambert
quelle

Antworten:

38

#includewurde im Jahr 2004 hinzugefügt . Es musste mit dem kompatibel sein, was schon da war. Ich glaube nicht, dass include /path/to/filedies mehrdeutig gewesen wäre, aber es wäre möglicherweise etwas schwieriger gewesen, es zu analysieren, da der Parser eine Unterscheidung zwischen include /path/to/file(include-Direktive) und include = foo(dem Benutzer gestatten include, den Befehl auszuführen foo) vornehmen müsste .

Aber ich denke, der Hauptgrund war, wie der C-Präprozessor auszusehen, den das Handbuch ausdrücklich als Inspiration nennt.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Netter Fang und Erklärung, leider wurden diese Erklärungen aus den Handbüchern entfernt (zumindest unter Ubuntu, RedHat, OpenBSD und Solaris).
Lambert
2
Das erste Mal, als ich meine sudoersDatei analysierte, dachte ich, dass includees sich um eine Direktive handelt und dass #includeeine Direktive auskommentiert ist . Die Regel der geringsten Überraschung wurde hart verletzt. Meiner Meinung nach ist es schlechtes Design.
Kamil Maciorowski