Proměnné prostředí (anglicky environment variables) jsou v operačních systémech nastavení, kterými lze ovlivňovat fungování spouštěných programů. Na rozdíl od příkazových parametrů, které je nutné uvádět při každém zadání příkazu, se proměnné prostředí nastavují předem, mohou být používány různými programy, a v prostředí, ve kterém byly nastaveny (například v příkazovém okně) i v prostředích z něho odvozených, platí až do provedení příkazu pro jejich změnu nebo zrušení. Proměnné prostředí byly představeny v Unixu, ale jsou používané i v Microsoft Windows a různých verzích DOSu stejně jako ve všech unixových systémech, včetně Linuxu a macOSu.
Charakteristika
Proměnné prostředí jsou součástí běhového prostředí, ve kterém proces běží. Proměnné prostředí byly ve své moderní formě představeny v roce 1979 v systému Unix verze 7 (Version 7 Unix) a od té doby jsou součástí všech unixových systémů včetně Linuxu a systému OS X. V roce 1982 firma Microsoft zavedla podporu proměnných prostředí do systému PC DOS 2.0, a od té doby jsou dostupné ve všech jejích systémech včetně systémů Microsoft Windows.
Proměnná prostředí je nastavena v operačním systému a procesy je přebírají. Při vzniku nového procesu jsou proměnné prostředí děděny od rodičovského procesu do potomka (do nového procesu). Proces vlastní svoje vlastní proměnné prostředí, může zjistit jejich hodnotu, změnit je nebo je zrušit. Proměnné prostředí mohou obsahovat důležité informace, které mohou používat různé programy. Takže například proměnná TEMP
obsahuje cestu k adresáři, kam lze ukládat dočasné soubory nebo proměnná HOME
(v Microsoft Windows USERPROFILE
) obsahuje cestu k domácímu adresáři uživatele, který proces spustil.
Unixové systémy
Ve všech Unixových systémech má každý proces vlastní sadu proměnných prostředí. Při vytváření procesu nový proces implicitně zdědí svého rodičovského procesu, toto prostředí však může rodičovský proces explicitně změnit. Na úrovni API musí být tyto změny provedeny mezi použitím příkazů fork
a exec
. Při použití příkazového shellu jako je bash, může uživatel změnit proměnné prostředí pro volání jednotlivých příkazů tak, že je nepřímo zavolá pomocí env
nebo ENVIRONMENT_VARIABLE=VALUE
.[ujasnit]
Použití
Proměnné prostředí mají různá použití, například:
Shellové skripty a dávkové soubory používají proměnné prostředí ke komunikaci s daty a nastavování preferencí pro procesy potomků. Také mohou byt použity k uložení dočasných hodnot pro pozdější použití v shellovém skriptu. V Unixu se však pro tyto účely většinou využívají jiné proměnné.
Pokud v Unixu dojde ke změně proměnné prostředí pomocí skriptu nebo kompilovaného programu, tato změna ovlivní pouze samotný proces, případně procesy potomků. Rodičovský proces a ostatní nesouvisející procesy nejsou ovlivněny. Při změně nebo odstranění hodnoty proměnné v dávkovém souboru u MS-DOS, zůstane proměnná pozměněna po dobu, kterou je spuštěn COMMAND.COM
.
V Unixu jsou proměnné prostředí standardně inicializovány pomocí systémových skriptů během spouštění systému, jsou tedy zděděny všemi ostatními procesy v systému. Uživatel je může rozšířit v profilovém skriptu příkazového shellu, který používá. V systému Microsoft Windows jsou hodnoty proměnných prostředí uloženy v registru Windows nebo nastaveny v systémovém souboru AUTOEXEC.BAT
.
Při spuštění procesu v Unixu, který má nastaven příznak setuid, je seznam proměnných prostředí redukován, protože proces běží s jinými oprávněními, než má volající uživatel. Za běžných okolností nahraje dynamický linker do paměti kód z umístění určených proměnnými prostředí LD_LIBRARY_PATH
a LD_PRELOAD
a teprve pak proces spustí. Kdyby tímto způsobem fungoval i proces s nastaveným atributem setuid, mohlo by dojít k narušení bezpečnosti, protože volající uživatel by mohl zneužít oprávnění, kterými normálně nedisponuje. Z tohoto důvodu standardní knihovna jazyka C při spuštění procesu s příznakem setuid odstraní voláním funkce unset
proměnné prostředí a nastaví je na jiné hodnoty.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Environment variable na anglické Wikipedii.