extern char **environ;
Die Variable environ zeigt auf die »Umgebung«, ein Feld von Zeigern auf Zeichenketten. Der letzte Zeiger in diesem Feld hat den Wert NULL. (Diese Variable muss im Anwenderprogramm deklariert werden, ist aber in der Header-Datei <unistd.h> definiert, falls das »feature test macro« _GNU_SOURCE definiert ist). Die Umgebung wird dem Prozess von dem exec(3)-Aufruf, der den Prozess gestartet hat, verfügbar gemacht. Wenn ein Kindprozess mit fork(2) erstellt wird, erbt es eine Kopie der Umgebung seines Elternprozesses.
Konventionsgemäß haben Zeichenketten in environ die Form »Name=Wert«. Häufige Beispiele sind:
Namen können in die Umgebung der Shell mit dem Befehl export von sh(1) oder dem Befehl setenv von csh(1) gelegt werden.
Die anfängliche Umgebung der Shell wird auf verschiedenen Arten aufgebaut, wie Definitionen aus /etc/environment, die (auf Systemen, die pam(8) einsetzen) durch pam_env(8) für alle Benutzer zum Anmeldezeitpunkt verarbeitet wird. Zusätzlich können verschiedene Shell-Initialisierungsskripte, wie das systemweite Skript /etc/profile oder benutzerbezogene Initialisierungsskripte Befehle enthalten, die Variablen zu der Umgebung der Shell hinzufügen. Lesen Sie dafür die Handbuchseite Ihrer bevorzugten Shell für weitere Details.
Bourne-artige Shells unterstützen die Syntax
NAME=Wert Befehl
um eine Umgebungsvariablendefinition zu erstellen, deren Geltungsbereich nur den Prozess, der Befehl ausführt, umfasst. Mehrere Variablendefinitionen, getrennt durch Leerraumzeichen, können Befehl vorangestellt werden.
Argumente können auch beim Aufruf von exec(3) an die Umgebung weitergegeben werden. C-Programme können ihre Umgebung mit den Funktionen getenv(3), putenv(3), setenv(3) und unsetenv(3) beeinflussen.
Bitte beachten Sie, dass das Verhalten vieler Programme und Bibliotheksroutinen vom Vorhandensein oder dem Inhalt bestimmter Umgebungsvariablen beeinflusst wird. Zu den Beispielen gehören:
Die Aktionen prctl(2) PR_SET_MM_ENV_START und PR_SET_MM_ENV_END können zur Steuerung des Orts der Umgebung des Prozesses verwandt werden.
Es ist offensichtlich, dass es hier ein Sicherheitsproblem gibt. Schon mancher Systembefehl hat den Pfad der Tugend verlassen, weil ein Benutzer ungebräuchliche Werte für IFS oder LD_LIBRARY_PATH angegeben hat.
Es besteht auch die Gefahr der »Verschmutzung des Namensraums«. Programme wie make und autoconf erlauben Überschreiben der Namen von Standard-Dienstprogrammen aus der Umgebung mit ähnlich benannten Variablen in Großbuchstaben. So verwendet man CC, um den gewünschten C-Compiler zu wählen (und analog MAKE, AR, AS, FC, LD, LEX, RM, YACC, usw.). Aber in einigen traditionellen Nutzungen gibt eine Umgebungsvariable keinen Pfadnamen, sondern Programmoptionen an. So gibt es MORE, LESS und GZIP. Diese Verwendung wird als falsch verstanden angesehen und sollte für neue Programme vermieden werden. Die Autoren von gzip sollten erwägen, ihre Option in GZIP_OPT umzubenennen.
bash(1), csh(1), env(1), login(1), printenv(1), sh(1), tcsh(1), execve(2), clearenv(3), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3), locale(7), ld.so(8), pam_env(8)
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Helge Kreutzmann <debian@helgefjell.de> und Dr. Tobias Quathamer <toddy@debian.org> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.