Environment variable

Nazwana wartość w środowisku procesu, dziedziczona przez procesy potomne (np. PATH, HOME). Wpływa na zachowanie programów bez modyfikacji ich kodu.

Environment variable (zmienna środowiskowa) to nazwana wartość przechowywana w środowisku procesu — czyli w prywatnym zestawie par NAZWA=wartość, który system operacyjny doczepia do każdego uruchomionego programu. Proces potomny dziedziczy kopię tych zmiennych po rodzicu, dzięki czemu możesz wpłynąć na zachowanie aplikacji bez grzebania w jej kodzie ani rekompilacji. Klasyczne przykłady to PATH (gdzie szukać programów do uruchomienia), HOME (katalog domowy użytkownika) czy LANG (język i kodowanie).

Jak to działa

Każdy proces w Linuksie ma własne środowisko — tablicę napisów, którą dostaje w momencie startu. Kluczowe słowo to dziedziczenie kopii: gdy bash uruchamia jakiś program, ten dostaje swój własny egzemplarz zmiennych. Jeśli program je zmieni, nie wpłynie to wstecz na powłokę, która go odpaliła. Z tego wynika częsty zgrzyt początkujących: ustawiasz zmienną w skrypcie, skrypt się kończy, a w terminalu nadal jej nie ma.

Programy czytają te wartości, żeby się skonfigurować: kompilator sprawdzi PATH, biblioteka połączeniowa weźmie DATABASE_URL, a narzędzie CLI zerknie do NO_COLOR, zanim pomaluje output. To wygodny, uniwersalny kanał konfiguracji — nie trzeba pliku, nie trzeba flagi, wystarczy ustawiona zmienna.

Przykład z praktyki

W bashu zmienna staje się środowiskowa dopiero po export — bez tego jest tylko lokalną zmienną powłoki:

  • API_KEY=abc123 — zwykła zmienna, widoczna tylko w tej powłoce.
  • export API_KEY=abc123 — teraz każdy proces uruchomiony stąd ją odziedziczy.
  • printenv API_KEY lub echo $API_KEY — sprawdzasz wartość.
  • API_KEY=abc123 node app.js — ustawiasz zmienną tylko na czas jednego uruchomienia, bez zaśmiecania reszty sesji.

W realnym projekcie zwykle trzymasz takie wartości w pliku .env, który ładuje np. Docker (env_file) albo biblioteka typu dotenv. To standardowy sposób na sekrety i konfigurację per-środowisko (dev, staging, produkcja).

Częste błędy i pułapki

  • Brak export — zmienna „nie działa”, bo dziecko jej nie odziedziczyło. To numer jeden na liście WTF-ów.
  • Spacje wokół =FOO = bar to dla basha próba uruchomienia komendy FOO. Pisz FOO=bar, bez spacji.
  • Sekrety w środowisku — wygodne, ale pamiętaj, że /proc/PID/environ i komenda env mogą je wyświetlić, a często trafiają do logów. Nie traktuj tego jak sejfu.
  • Wielkość liter — konwencja to UPPER_CASE, ale nazwy są case-sensitive: Path to nie to samo co PATH.

Pojęcia powiązane

Warto kojarzyć: powłoka (shell) i export, plik .env, zmienna PATH, pliki startowe .bashrc i .profile, proces i jego dziedziczenie, oraz printenv/env/unset do podglądu i czyszczenia środowiska.