Кіріспе
Көптеген операциялық жүйелерде әрбір іске қосылған процеске сәйкес келетін пайдаланушы анықтаған айнымалы – қоршаған орта айнымалысы. Қоршаған орта айнымалысы – компьютерде іске қосылған процестердің қалай жұмыс істейтініне әсер ететін пайдаланушы анықтаған мән. Қоршаған орта айнымалылары – процесс іске қосылатын ортаның бір бөлігі. Мысалы, іске қосылған процесс TEMP қоршаған орта айнымалысының мәнін сұрап, уақытша файлдарды сақтауға қолайлы жерді анықтай алады, немесе HOME немесе USERPROFILE айнымалысы арқылы процесс іске қосылып жатқан пайдаланушыға тиесілі каталог құрылымын таба алады. Олар 1979 жылы Unix 7 нұсқасымен қазіргі түрінде енгізілді, сондықтан Linux және macOS-ты қоса алғанда, барлық Unix операциялық жүйелерінің түрлері мен нұсқаларында қолданылады. 1982 жылы PC DOS 2.0 нұсқасынан бастап, Microsoft Windows және OS/2 сияқты барлық келесі Microsoft операциялық жүйелері де оларды мүмкіндік ретінде қосты, бірақ синтаксисі, қолданылуы және стандартты айнымалы атаулары шамалы өзгеше.
An environment variable is a user definable value that can affect the way running processes will behave on a computer. Environment variables are part of the environment in which a process runs. For example, a running process can query the value of the TEMP environment variable to discover a suitable location to store temporary files, or the HOME or USERPROFILE variable to find the directory structure owned by the user running the process. They were introduced in their modern form in 1979 with Version 7 Unix, so are included in all Unix operating system flavors and variants from that point onward including Linux and macOS. From PC DOS 2.0 in 1982, all succeeding Microsoft operating systems, including Microsoft Windows, and OS/2 also have included them as a feature, although with somewhat different syntax, usage and standard variable names.
Дизайн
Барлық Unix және Unix-қа ұқсас жүйелерде, сондай-ақ Windows-та, әр процестің өз жеке орта айнымалылары болады. Көбінесе процесс құрылғанда, ол ата-ана процесінің орындалу ортасын мұра етеді, бірақ ата-ана процесі бала процесті құрғанда жасаған нақты өзгерістерден басқа. API деңгейінде, бұл өзгерістер fork және exec командалары орындалғаннан кейін жасалуы керек. Әйтпесе, bash сияқты командалық қабықшалардан пайдаланушы, env командасы арқылы немесе ENVIRONMENT VARIABLE=VALUE <command> түрінде орта айнымалыларын өзгерте алады. Іске қосылған бағдарлама конфигурация үшін орта айнымалыларының мәндерін пайдалана алады. Shell скрипттері мен пакеттік файлдар орта айнымалыларын қолданады, сондай-ақ кейінірек сілтеме жасау үшін уақытша мәндерді сақтау үшін де қолданылуы мүмкін. Дегенмен, Unix жүйесінде экспортталмаған айнымалылар артықшылыққа ие, себебі олар процесс шегінен тыс жайылып кетпейді. Unix-те скрипт немесе компиляцияланған бағдарламада өзгертілген орта айнымалы тек сол процесске және мүмкін, оның туыс процестеріне ғана әсер етеді. Ата-ана процесіне және басқа байланыссыз процестерге әсер етпейді. Сол сияқты, DOS немесе Windows пакеттік файлында айнымалының мәнін өзгерту немесе жою, COMMAND.COM немесе CMD.EXE жұмыс істеу кезеңінде ғана осы айнымалыны өзгертеді. Unix жүйесінде орта айнымалылары әдетте жүйелік бастапқы скрипттер арқылы жүйе іске қосылғанда инициализацияланады және осылайша жүйедегі барлық басқа процестер мұра етеді. Пайдаланушылар оларды өздері қолданатын командалық қабықтың профиль скриптінде қосып, жиі өзгертеді. Microsoft Windows жүйесінде әр орта айнымалысының бастапқы мәні Windows тіркелімінде сақталады немесе AUTOEXEC.BAT файлында орнатылады. Unix жүйесінде setuid бағдарламасына шақырушы таңдаған орта беріледі, бірақ ол шақырушыдан өзге билікпен жұмыс істейді. Динамикалық байланыстырушы әдетте $LD_LIBRARY_PATH және $LD_PRELOAD орта айнымалыларында көрсетілген орындардан кодты жүктейді және оны процесс билігімен орындайды. Егер setuid бағдарламасы осылай істесе, ол қауіпсіз болмас еді, себебі шақырушы оны кез келген кодты орындауға мәжбүрлей алады және осылайша оның билігін дұрыс пайдаланбауға мүмкіндік береді. Осы себепті libc setuid процесінде бастау кезінде осы орта айнымалыларын жояды. setuid бағдарламалары әдетте белгісіз орта айнымалыларын жойып, басқаларын тексереді немесе оларды дұрыс мәндерге орнатады. Жалпы, орта айнымалыларының жиынтығы ассоциативтік массив ретінде жұмыс істейді, онда кілттер мен мәндер жолдар болып табылады. Екі жолдағы символдардың мағынасы жүйелер арасында өзгеше болуы мүмкін. Тізімдер сияқты дерек құрылымдарын көрсету қажет болғанда, екі нүктелі (Unix және Unix-қа ұқсас жүйелерде) немесе нүктелі-сызық (Windows және DOS жүйелерінде) тізімдерді пайдалану жиі кездеседі.
Синтаксисі
Айнымалыларды скрипттерде де, командалық жолда да пайдалануға болады. Олар әдетте айнымалы атауының алдына немесе айналасына арнайы белгілер қойылып сілтеме жасалады. Қоршаған ортаның айнымалы атауларын әдетте толық үлкен әріптермен жазады. Бағдарламалау кодексарында мұндай жазу, қоршаған ортаның айнымалыларын кодтағы басқа атаулардан ажыратуға көмектеседі. Unix сияқты операциялық жүйелерде қоршаған ортаның айнымалы атаулары әріптердің үлкен-кішкендігіне сезімтал, ал DOS, OS/2 және Windows жүйелерінде сезімтал емес.