A környezeti változók (angolul environment variables) a számítógép működésére nézve fontos információkat tartalmazó szöveges (sztring) szimbólumok, amelyeket az operációs rendszer tárol (A környezeti változók nem tévesztendőek össze a programok belső változóival). A környezeti változók mindig a programokon kívül léteznek, de a programok számára elérhetőek: a programok „közelében”, környezetében fordulnak elő. Környezeti változó például a PATH, a PROMPT, a TEMP, stb. A környezeti változók értékeit a programok lekérdezhetik és felhasználhatják működésükhöz.

Jelentősége A környezeti változók legfontosabb alkalmazási területe a rendszer indítása során a felhasználó számára kényelmes, egyedi környezet automatikus beállítása Például a rendszerdátum, készenléti jel, időzóna, használt nyelv és kódlapok, stb., stb. beállítása. A környezeti változók egyéb alkalmazásokban főként akkor válnak jelentőssé, amikor adato(ka)t kell átadni olyan programok részére, amelyek a kérdéses adato(ka)t parancssori paraméterként nem tudják átvenni; az operációs rendszer egyes szolgáltatásait kell elérni (például rendszeridő, könyvtárak, fájlok elérési útjai) jelentősebb programozói erőforrás igénybevétele nélkül; programok közötti néhány szavas adattovábbításra van szükség és az átadandó adatok fájlba írására nincs lehetőség.Például Unix esetén nincs írási jogunk a könyvtárra, stb.

Számos program úgy van megszerkesztve, hogy működése függ egyes környezeti változók értékeitől. Ezért a programok indulás előtt ellenőrizhetik bizonyos környezeti változók meglétét. Például a legtöbb szöveg- és dokumentumszerkesztő program hoz létre átmeneti munkafájlokat (ideiglenes fájlokat) adtatok tárolására, amelyeket kilépéskor automatikusan töröl. Az átmeneti fájlok helye rendszerint a TEMP környezeti változó által meghatározott könyvtár. Számos program egyedi környezeti változót használ működésének befolyásolására.A Unix man parancsa például a nyelvek közötti váltásra használja a LANG környezeti változót Példa: REM a halom (heap) memóriaméretét állítja be egy LISP interpreter számára SET LISPHEAP=39000 Néhány program pedig indítási kísérlet után hibaüzenettel leáll, ha az általa keresett speciális környezeti változót nem találja meg, vagy a megtalált környezeti változó a program számára hibás adatokat tartalmaz.

Története A környezeti változók mai formáját 1979-ben a Unix 7-es verzióban vezették be és benne van a Unix operációs rendszerekben, beleértve a Linuxot és OS X-et is, majd átvette a PC DOS 2.0-1982-ben. Később a Microsoft összes operációs rendszere is használatba vette a környezeti változókat, bár némileg eltérő a használat szintaxisa (a környezeti változókra való hivatkozás és a kiértékelés módja) továbbá eltérés van egyes változók neveiben is. Néhány környezeti változó csak az adott operációs rendszerben található meg, mint például a %PWD% vagy a %WINDIR%

Alapok Minden Unix/Linux operációs rendszer, a DOS és a Microsoft Windows összes verziója használ környezeti változókat, de nem mindegyik ugyanazokat. Néhány környezeti változó:http://www.letix.hu/#bash PWD - az aktuális könyvtár neve; HOME – azt a könyvtárat jelöli, amelybe egy cd utasítás hatására ugrik; PATH – azon könyvtárak listája ahol a parancsértelmező a kiadott parancsokat keresi; MAIL – a leveleket tartalmazó fájl neve; TERM – a terminál típusa; SHELL – a bináris shell állomány elérési útvonala; LOGNAME – az a név amelyen a felhasználót a rendszer nyilvántartja.

Környezeti változó lekérdezése A rendszerben lévő környezeti változók lekérdezése függ a használt operációs rendszertől. A paraméter nélkül, önmagában kiadott SET parancs minden operációs rendszeren kiíratja az összes használt környezeti változó nevét és azok értékeit isuo. Unix/Linux alatt környezeti változók lekérdezésére további lehetőségek is vannak, mint pl. az env vagy printenv parancs használata, stb. Amennyiben csak egyetlen környezeti változó értékére van szükség, akkor a lekérdezni kívánt környezeti változó pontos nevét kell megadni az adott operációs rendszer szabályai szerint. Egy példa a TEMP környezeti változó értékének lekérdezésére különböző operációs rendszerekben:

a) Unix/Linux esetén echo $TEMP

b) MS-DOS, OS/2 és Windows rendszerekben ECHO %TEMP%

Windows PowerShell használata esetén pedig: Write-Output $TEMP

Létrehozás, értékadás Környezeti változókat általában a rendszerindító és konfigurációs állományok (például az AUTOEXEC.BAT fájl) hoznak létre. A számítógép kezelőjének kétféle lehetősége van környezeti változó létrehozására: parancssorba való begépeléssel vagy batch programmal (shell szkripttel).

Környezeti változó létrehozása a SET paranccsal történik. Egy környezeti változó értékadáskor automatikusan jön létre: @ECHO OFF REM környezeti változó létrehozása értékadással SET vackor="vadkörte"

Módosítás Az értékadás egyik esete a módosítás, melynek során a környezeti változó értéke törlődhet és ezután felvesz az új értéket (kicserélődik), vagy kiegészül a meglévő érték megtartása mellett (például a PATH) környezeti változó. @ECHO OFF REM a PATH környezeti változó kiegészítése új könyvtár elérési útjával SET PATH=%PATH%;c:\DOS

Nem minden környezeti változó módosítható. A felhasználó által létrehozott környezeti változókon kívül a rendszerben mindig meglévő környezeti változók lehetnek konstans vagy dinamikus környezeti változók.

A konstans környezeti változók nem módosíthatóak. Ilyen például a processzor típusát visszaadó környezeti változó.

A dinamikus környezeti változók értékeit általában a rendszer automatikusan frissíti, de esetenként (megfelelő szabályok betartásával) módosíthatóak. Dinamikus környezetváltozók közé tartoznak például az aktuális dátumot, időt vagy az aktuális könyvtár nevét tároló környezeti változók.

Dokumentálatlan környezeti változók

A legtöbb rendszer tartalmaz nem publikált, nem dokumentált környezeti változókat. Például a Windows az alábbi nem dokumentált – csak olvasható – környezeti változókat használja: Változó neve Jelentése %__CD__% Az aktuális könyvtár neve \-jellel lezárva%=C:% A C: meghajtó használata esetén az aktuális könyvtár %=D:% A D: meghajtó használata esetén az aktuális könyvtár %=ExitCode% A legutolsó futott program kilépési kódja tizenhatos számrendszerben %=ExitCodeAscii% A legutolsó futott program kilépési kódjának ASCII értéke, ha nyomtatható karakter (32-től nagyobb)

Microsoft Windows környezeti változói A következő táblázat a Windows operációs rendszer környezeti változóinak leírását tartalmazza: Változó neve Jelentése %ALLUSERSPROFILE% "All Users" profil elérési útja. %APPDATA% Az alkalmazások a profilon belül itt tárolják az adataikat. %CD% Aktuális könyvtár. %CMDCMDLINE% Az éppen futó parancssor ("cmd.exe") elérési útja, idézőjelbe téve. %CMDEXTVERSION% Parancssor verziószám. %COMPUTERNAME% Számítógépnév. %COMMONPROGRAMFILES% C:\Program Files\Common Files %COMMONPROGRAMFILES(x86)% ? C:\Program Files (x86)\Common Files (csak 64 bites verziókban) %COMSPEC% A parancsértelmező helye: C:\Windows\System32\cmd.exe %DATE% Rendszerdátum. %ERRORLEVEL% Futás során keletkezett kilépési hibák kódja. Ha 0, akkor nem volt hiba. %HOMEDRIVE% C: %HOMEPATH% A felhasználó saját könyvtárának elérési útja. \Documents and Settings\{username} %HOMESHARE% A felhasználó saját megosztott könyvtárának elérési útja. %LOCALAPPDATA% ? %LOGONSERVER% Az aktuális munkafolyamat ezen a kiszolgálón zajlik (ide jelentkezett be a felhasználó). %NUMBER_OF_PROCESSORS% Processzorok száma. %OS% Operációs rendszer neve. A Windows XP és a Windows 2000 a Windows_NT értéket adja vissza. %PATH% Végrehajtható fájlok keresési útvonala: C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;{plusz program path} %PATHEXT% Végrehajthatónak minősített fájlok kiterjesztései: COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.WSF;.WSH %PROCESSOR_ARCHITECTURE%Processzor architektúra: x86, IA64. %PROCESSOR_IDENTIFIER% Processzor azonosító. %PROCESSOR_LEVEL% Processzor modell száma. %PROCESSOR_REVISION% Processzor revízió száma. %PROGRAMDATA% ? %PROGRAMFILES% %SystemDrive%\Program Files %PROGRAMFILES(X86)% %SystemDrive%\Program Files (x86) (csak 64 bites verziókban) %PROMPT% Kódokkal állítható be a készenléti jel.Default: $P$G %PSModulePath% ? %PUBLIC% ? %RANDOM% Véletlenszám előállítás 0 és 32767 között. {Drive}:\$Recycle.Bin C:\Recycle.Bin %SystemDrive% Az operációs rendszert tartalmazó kötet meghajtóbetűjele. %SystemRoot% A Windows könyvtár elérési útja; C:\Windows, formálisan C:\WINNT %TEMP% és %TMP% Átmeneti fájlok tárolásának elérési útja (TEMP vagy TMP mappa) %SystemDrive%\Documents and Settings\{username}\Local Settings\Temp %TIME% Aktuális idő. %USERDOMAIN% Aktuális felhasználói fiókot tartalmazó tartomány neve. %USERNAME% Bejelentkezett felhasználó neve. %USERPROFILE% A Windows könyvtár elérési útja (u.a., mint SYSTEMROOT) %SystemDrive%\Documents and Settings\{username} %WINDIR% A Windows könyvtár elérési útja (u.a., mint SYSTEMROOT) %SystemDrive%\Windows

Programozási nyelvek és a környezeti változók Nemcsak az operációs rendszer, hanem számos fejlesztői rendszer és programozási nyelv is hozzáférést biztosít a környezeti változókhoz. Például a legtöbb C nyelvű fordító stdlib könyvtára tartalmazza a char *getenv(const char *name) és a int putenv(char *newvalue) függvényeket, melyek a környezeti változók kezelésére szolgálnak.Pere László: Unix - GNU/LinuxProgramozás C nyelven Kiskapu Kiadó 2003, , p. 100-103.

Operációs rendszerektől függő sajátosságok Unix/Linux rendszerek esetén egy processz örökli a környezeti változók másolatát és csak a környezeti változók másolatához férhet hozzá. DOS operációs rendszerek esetén a környezeti változók számára fenntartott memória nagysága korlátozva lehet. Windows alatt a PATH környezeti változó törlése a rendszer összeomlásával járhat, mert nem találja meg a rendszerfájlokat sem.

Jegyzetek

Kapcsolódó szócikkek Batch programozás

Források Pere László: Unix - GNU/Linux - Programozás C nyelven Kiskapu Kiadó 2003, , p. 100-103. https://web.archive.org/web/20131124134946/http://ghostscript.com/doc/7.07/Use.htm#Environment_variables Unix ismertető, MEK Bauer Péter: Programozás jegyzet, Győr 2004, p.199-200. Windows Environment Variables Environment variable

További információk User Environment Variables Környezti változók kezelése a Windows XP rendszerben Set environment variables on Mac OS X Lion Configuring Your OS X Unix Environment Linux: Set Environment Variable

Kategória:Számítógép-programozás