Короткая версия:
Сценарий python меняет свою среду. Однако это не влияет на среду родительского процесса (оболочка)
Длинная версия:
Что ж, это хорошо известная, но довольно запутанная проблема.
Что вам нужно знать, так это то, что среда не существует, каждый процесс имеет свою собственную среду.
Итак, в вашем примере над оболочкой (где вы вводите свой код ) имеет одну среду. Когда вы вызываете ./myvar.py
, создается копия текущей среды, которая передается вашему сценарию python. Ваш код «только» изменяет эту копию среды. Как только сценарий python будет завершен, эта копия будет уничтожена, и оболочка увидит свою исходную неизмененную среду.
Это верно для большинства операционных систем (Windows, Linux, MS-DOS, ...)
Другими словами: ни один дочерний процесс не может изменить среду вызывающего его процесса.
В bash есть хитрость, в которой вместо исходного кода используется сценарий. вызова этого процесса.
Однако, если ваш сценарий python запускает другой процесс (например, /bin/bash
), тогда дочерний процесс увидит измененную среду.