Der Befehl env ist eines der weniger bekannten Standardprogramme aus dem Unix-Werkzeugkasten, das Sie in einem Linux-System finden. Das liegt daran, dass die Shell, die Ihnen unter Linux die Kommandozeile zur Verfügung stellt, für einen Teil seiner Funktionen eingebaute Kommandos hat.
Mit dem Befehl env können Sie die sogenannte Umgebung, englisch Environment, für den Aufruf eines Programms aus einer Shell verändern. Das Environment besteht aus Variablen, die Sie beim Aufruf von env durch die Angabe von Parametern der Form "NAME=WERT" setzen oder über die Option "-u NAME" löschen können. Alle Argumente nach solchen Optionen und Variablenzuweisungen interpretiert der Befehl env als Kommandozeile und führt sie in einer entsprechend modifizierten Umgebung aus. Wird keine Kommandozeile angegeben, dann zeigt env die Umgebung, durch Auflistung aller Variablen, an.
Variablen anzeigen können Sie in einer Bourne-Shell, wie zum Beispiel der Bash, auch mit den eingebauten Kommandos set und export. Der Befehl set listet aber nicht nur Umgebungsvariablen, sondern auch Shell-Variablen auf. Diese werden von der Shell nicht an Programme weitergegeben (vererbt), die sie startet. Der Befehl export dient hauptsächlich zum exportieren von Shell-Variablen in das Environment. Im Unterschied dazu, wirken die Befehle set und unset bei C-Shells nur auf Shell-Variablen. Umgebungsvariablen werden hier mit setenv und unsetenv bearbeitet. Das Kommando env funktioniert dagegen unter allen Shells gleich.
Der eigentliche Zweck des Kommandos env ist aber, ein Programm mit veränderten Umgebungsvariablen auszuführen, ohne die Umgebung der laufenden Shell zu verändern. Beispielsweise führt die Kommandozeile "env VAR1=WERT1 -u VAR2 VAR3=WERT3 PROG" das Programm PROG mit den Variablen VAR1 und VAR3 aber ohne VAR2 aus. Ähnliches können Sie zwar auch erreichen, wenn Sie beim Start eines Programms die Variablenzuweisungen einfach dem Programmnamen voran stellen, also zum Beispiel "VAR1=WERT1 VAR2=VAR3=WERT3 PROG". Der Befehl env bietet aber
noch eine interessante Besonderheit.
Mit der Option -i aufgerufen, ignoriert env die eigene Umgebung vollständig. Geben Sie keine Variablenzuweisungen an, dann ist die Umgebung des gestarteten Programms komplett leer, was Sie mit "env -i HELLO=WORLD" überprüfen können. Mit dieser Option können Sie sicherstellen, dass die Funktion eines Shell-Skripts nicht durch das Setzen von Umgebungsvariablen manipuliert wird - beispielsweise bei CGI-Skripten, die vom Benutzer im Browser eingegebene Parameter als Umgebungsvariablen übergeben bekommen. Bei der Verwendung von "env -i" ist allerdings zu beachten, dass einige Variablen, insbesondere PATH, HOME, USER beziehungsweise LOGNAME und teilweise TERM, für die korrekte Funktion vieler Programme notwendig sind. Diese sollten daher entweder explizit gesetzt (PATH=/bin:/usr/bin:/usr/local/bin) oder übernommen werden (HOME="$HOME").