Hi,
also in Linux ist es so, dass man Variablen, die allgemein verfügbar sind, exportiert. Das sieht so aus:
VARIABLE='/pfad/nach/irgendwo'; export VARIABLE;
Das bewirkt, dass die Variable "VARIABLE" in die Umgebung des Benutzers, der das Skript aufruft aufgenommen wird. Damit ist die Variable so wie z.B. bei PHP oder Perl DOCUMENT_ROOT.
dann gibt es bei den meisten Linux-Systemen ein Verzeichnis "/etc/profiles.d/", in dem einige Shell-Skripte drin sind, die immer dann aufgerufen werden, wenn sich ein User einloggt. Da der Apache im Prinzip auch nur ein User ist, werden diese Skripte also auch aufgerufen wenn er gestartet wird (also sich quasi am System anmeldet).
Nun habe ich in dem oben genannten verzeichnis ein Shell-Skript, das eine Zeile wie die oben geschriebene beinhaltet und eine Variable exportiert. Die Variable wird somit für den Benutzer überall zugreifbar.
Die wohl bekannteste dieser Umgebungsvariablen ist PATH. In dieser wird gespeichert, welche Pfade benutzt werden sollen, um nach Programmen zu suchen (siehe
http://www.linuxwiki.de/PATH).
Da diese Umgebungsvariable direkt an Perl weitergegeben wird, wenn über den Apache ein CGI-Skript aufgerufen wurd, dann muss es ja irgendwie möglich sein, auch andere Umgebungsvariablen weiterzugeben, die nicht standardmäßig weitergegeben werden, wie eben zum Beispiel selbst definierte Variablen.
Wie gesagt, in PHP kann ich frei auf die Variable zugreifen, da ist sie vorhanden.
Nun habe ich eine grafische Oberfläche geschrieben (ein paar PHP/HTML-Seiten), die das erleichterte Aufrufen von Programmen ermöglicht, so dass nicht immer die Konsole verwendet werden muss. Zu der Oberfläche gehören aber auch Shell-Skripte und einige Perl-Skripte (als CGI), da manches eben in Perl oder Shell besser realisierbar ist als in PHP. Manche Shell-Skripte und auch manche Perl-Skripte werden aber auch con PHP-Skripten aufgerufen - das ganze ist ein bisschen kompliziert aber es ist auch ein größeres Projekt.
Vielleicht kommen auch noch ein paar C-Programme hinzu, die ebenfalls als CGI laufen sollen.
Wenn ich jetzt also in all diesen verschiedenen Skripten eine Variable benötige, die auf den Ordner zeigt, in dem die Programme liegen, die ich aufrufen will, dann ist es doch nur logisch, eine Globale Umgebungsvariable zu benutzen, die von allen Programmen gelesen werden kann, sonst muss ich beim Verschieben des Programmordners alle Dateien ändern, bei C-Programmen sogar neu kompilieren etc.
Die Variable PATH möchte bzw. kann ich nicht verwenden, da ich Programme benutze, die gleich heißen wie Programme, die in den Pfaden von PATH vorhanden sind, und das würde zu Komplikationen führen.
So ich hoffe ich habe jetzt nichts offen gelassen :) Ansonsten einfach noch mal fragen!