Получение переменных окружения с помощью кода C

Здесь я написал программу на C, которая выполняет файл hi.sh, используя вызов system.

Здесь я использовал . ./hi.sh, поэтому я хочу выполнить этот скрипт в той же оболочке а затем попытаться получить переменную среды с помощью функции getenv, но здесь я получаю результат, отличный от ожидаемого.

Файл hi.shсодержит

export TEST=10
return

Означает, что когда я запускаю этот файл hi.shс помощью системного вызова, его экспорт TESTустанавливает значение равным 10 в одной оболочке. После этого я пытаюсь получить значение этой переменной, но ей задано значение NULL.

И если я запущу этот скрипт вручную из консоли, например . ./hi.sh, тогда он работает нормально, и я получаю 10 значений TEST, используя функцию getenv("TEST").

Код:

#include <stdio.h>
int main()
{
    system(". ./hi.sh");
    char *errcode;
    char *env = "TEST";
    int errCode;    
    errcode = getenv(env);
    printf("Value is = %s\n",errcode);
    if (errcode != NULL) {
        errCode =atoi(errcode);
        printf("Value is = %d\n",errCode);
    }
}

вывод:

Value is = (null)

Как экспортировать переменную TEST в программную оболочку? Если system()выполняет команды в другой оболочке, то как я могу использовать программный код C для получения переменной среды, которая экспортируется оболочкой, вызванной с помощью вызова system()?

]
8
задан Jonathan Leffler 20 October 2015 в 15:03
поделиться