Здесь я написал программу на 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()
?