Любая unix-программа запускается отдельно от процесса, который ее запускает;это «дочерний» процесс.
Когда программа запускается - будь то в командной строке или любым другим способом - система создает новый процесс, который (более или менее)копия родительского процесса.Эта копия включает переменные среды в родительский процесс, и это механизм, с помощью которого дочерний процесс «наследует» переменные среды своего родителя.(это в значительной степени то, что сказали здесь другие ответы)
То есть только процесс когда-либо устанавливает свои собственные переменные окружения.
Другиеупомянули использование сценария оболочки в качестве способа задания переменных среды в текущем процессе, но если вам нужно программно установить переменные в текущем (оболочечном) процессе, то есть несколько косвенный способ, которым это возможно.
Учтите это:
% cat envs.c
#include <stdio.h>
int main(int argc, char**argv)
{
int i;
for (i=1; i<argc; i++) {
printf("ENV%d=%s\n", i, argv[i]);
}
}
% echo $ENV1
% ./envs one two
ENV1=one
ENV2=two
% eval `./envs one two`
% echo $ENV1
one
%
Встроенный eval
оценивает свой аргумент так, как если бы этот аргумент был набран в командной строке.Это пример стиля sh;вариант в стиле csh оставлен в качестве упражнения!