Umgebungsvariablen dienen nicht nur den Benutzereinstellungen. Sie sind ein generischer Mechanismus für die Übermittlung einer Vielzahl von Einstellungsinformationen von einem übergeordneten Prozess an untergeordnete Prozesse, die gestartet werden.
Es gibt zahlreiche Fälle, in denen ein Prozess bestimmte Umgebungsvariablen festlegt, um nur die Prozesse zu beeinflussen , die er startet. Beispielsweise kann ein Skript die Gebietsschemaeinstellungen für Befehle, die es startet, absichtlich zurücksetzen, sodass es die Ausgabe von ihnen analysieren kann. Die Build-Skripte für viele große Softwarepakete verwenden verschachtelte Aufrufe make
dieser Koordinate über Umgebungsvariablen. Spezialisierte Tools müssen möglicherweise die Arbeitsbedingungen anderer Programme ändern, die sie starten, indem sie Tricks mit $ LD_PRELOAD oder $ PATH ausführen.
Wenn etwas, das ein Benutzer in einem anderen Fenster tut, während eine lange Kompilierung in einem anderen ausgeführt wird, die Umgebungsvariablen aller seiner Prozesse hinter seinem Rücken auf magische Weise ändert , entstehen Wahnsinn und Chaos.
Andere Umgebungsvariablen enthalten Informationen zu der bestimmten Sitzung, in der ein Prozess gestartet wird. Programme erwarten, dass $ TERM den Befehlssatz des bestimmten Terminals (oder Terminalemulators) beschreibt, mit dem sie verbunden sind. Wenn eine allgemeine Einstellung pro Benutzer vorgenommen wird, ist es unmöglich, mit mehreren verschiedenen Arten von Terminals am selben System angemeldet zu sein. Selbst wenn Sie nur über eine Terminalhardware verfügen und sich nie remote anmelden, müssen Programme wie z. B. screen
einen anderen $ TERM für die Prozesse festlegen, die in ihrer Sitzung ausgeführt werden.
Eine bessere Frage wäre, warum wir einen Kommunikationsmechanismus von Prozess zu Unterprozess für Benutzereinstellungen verwenden und nicht eine Datenbank pro Benutzer.
Antwort: Weil es gut genug funktioniert und die Vorteile einer Benutzerdatenbank nicht groß genug sind, um alles zu ändern , um es anstelle von Umgebungsvariablen zu verwenden.
(Ich kann mir nur sehr wenige Voreinstellungen vorstellen, bei denen es keine Anwendungsfälle gibt, in denen es bequem ist, sie nur zum Ausführen eines einzelnen Skripts zu ändern. Um also nicht die Funktionalität zu verlieren, müsste immer noch alles überschrieben werden Umgebungsvariablen, was zu zusätzlicher Komplexität und verwirrteren Benutzern führt).
Es ist nicht so , dass Alternativen nicht vorhanden ist . Beispielsweise befinden sich X-Ressourcen pro Anzeigesitzung und nicht pro Prozess. Aber sie sind nur schwer zugänglich für Kommandozeilen - Programme - und Kommandozeilen - Programme in der Regel arbeiten müssen für Remote - Logins , die nicht einmal hat einen X - Server zu verbinden.