Zmienne środowiskowe w systemie Linux

Zmienne środowiskowe to dodatkowe dane przekazywane do uruchamianego programu. Ustawiane są podczas uruchamiania systemu, procesu logowania użytkownika oraz w trakcie pracy powłoki systemowej.

Zmienne te zawierają informacje takie jak:

  • aktualny katalog roboczy (CWD, zmienna PWD),

  • wykorzystywany interpreter języka poleceń (zmienna SHELL),

  • położenie katalogu domowego użytkownika (zmienna HOME),

  • katalogi, w których poszukiwane są programy (zmienna PATH).

Zmienne środowiskowe w języku C

Zmienne środowiskowe przechowywane są jako napisy postaci NAZWA=WARTOŚĆ w globalnej tablicy environ.

Do operacji na zmiennych środowiskowych służą funkcje: getenv(), putenv(), setenv(), unsetenv().

#include <stdio.h>

extern char **environ;

int main() {
    char **env = environ;

    while (*env != NULL) {
        printf("%s\n", *env);
        env++;
    }

    return 0;
}

Zmienne środowiskowe w powłoce BASH

Domyślnie zmienne powłoki nie są przekazywane do podprocesów i są widoczne jedynie w bieżącej powłoce. Zmienną taką należy wyeksportować, aby stała się widoczna dla procesu potomnego jako zmienna środowiskowa.

Przyjęło się, że nazwy zmiennych środowiskowych (eksportowane zmienne powłoki) pisane są wielkimi literami, chociaż są od tego wyjątki (np. http_proxy).

Do wyświetlenia wszystkich zmiennych powłoki można wykorzystać polecenie set, natomiast do wyświetlenia zmiennych środowiskowych polecenia env oraz printenv.

$ LC_ALL=C
$ printenv | grep LC_ALL
$ set | grep LC_ALL
LC_ALL=C
$ export LC_ALL
$ printenv | grep LC_ALL
LC_ALL=C
$ set | grep LC_ALL
LC_ALL=C

Więcej informacji i przykładów znajdziesz w prezentacji umieszczonej na górze strony.

Literatura

  1. EnvironmentVariables

  2. Zmienne środowiskowe

  3. man 1 bash

  4. man 7 environ

  5. man 3 getenv

  6. man 3 putenv

  7. man 3 setenv

  8. man 3 unsetenv