В надежде дать ясность по поводу общей синфузии ...
Я написал много python <-> bash <-> elfbin toolchains, и правильный способ увидеть это так:
Каждый процесс (отправитель) имеет состояние среды, унаследованное от того, что его вызвало. Любые изменения остаются локальными для этого процесса. Передача состояния среды сама по себе является функцией и выполняется в двух направлениях, каждое со своими оговорками. Самым распространенным является изменение среды перед запуском подпроцесса. Чтобы перейти к металлу, посмотрите на вызов exec () в C. Есть вариант, который принимает указатель на данные среды. Это единственная реально поддерживаемая передача среды в типичных ОС.
Сценарии оболочки создадут состояние, которое будет передаваться при запуске дочерних элементов при выполнении экспорта . В противном случае он просто использует то, что получил в первую очередь.
Во всех остальных случаях это будет некоторый общий механизм, используемый для передачи набора данных, чтобы позволить самому вызывающему процессу обновить свое окружение на основе результата вывода дочерних процессов.
Ex:
ENVUPDATE = $(CMD_THAT_OUTPUTS_KEYVAL_LISTS)
echo $ENVUPDATE > $TMPFILE
source $TMPFILE
Конечно, то же самое можно сделать с помощью json, xml или других вещей, если у вас есть инструменты для интерпретации и применения.
Необходимость в этом может быть (с вероятностью 50%) признаком неверного истолкования базовых примитивов и того, что вам нужно улучшить конфигурацию или обмен параметрами в вашем решении .....
О, в Python я бы сделал что-то вроде ...
(требуется улучшение в зависимости от вашей ситуации)
import re
RE_KV=re.compile('([a-z][\w]*)\s*=\s*(.*)')
OUTPUT=RunSomething(...) (Assuming 'k1=v1 k2=v2')
for kv in OUTPUT.split(' ')
try:
k,v=RE_KV.match(kv).groups()
os.environ[k]=str(v)
except:
#The not a property case...
pass