2013-02-25 4 views
-2

Я пытаюсь изменить свою $ PATH в программе на C. После этого кода, когда я печатаю свою переменную PATH, она остается прежней. Вот мой подход,Настройка переменной окружения в C

char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

Я пытаюсь напечатать его обратно с помощью эхо $ PATH и он по-прежнему показывает прежний путь, так как в нем не изменилось.

+1

Вы не можете использовать 'echo $ PATH' из одного и того же процесса. О чем именно вы говорите? – EJP

ответ

6

Пожалуйста, покажите мне, как вы получите переменную окружения после ее настройки. У меня есть следующий код C работает для меня, как и ожидалось:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

    char* pPath; 
    pPath = getenv("PATH"); 

    printf("%s", pPath); 

    return 0; 
} 

Выход: /newfolder/hello/

Я пытаюсь напечатать его обратно с помощью эхо $ PATH и по-прежнему показывает, бывший путь, так как в нем не изменяется.

ли вы используете в вашей программе что-то вроде:

system("echo $PATH"); 

Тогда вы не получите, что значение, которое вы установили, так как эта команда будет выполняться и оцениваться с вашего процесса оболочки, который до сих пор имеющей значения начальной переменной среды.

+0

У меня есть собственная оболочка, которую я создаю, и я вызываю echo $ PATH, и она все еще печатает старое значение – markfiel

+0

@ user2098078 Тогда вы строите его неправильно. Что-то не так с вашим кодом для 'echo $ PATH'. Это не вопрос. Этот спор полностью опровергнут этим ответом. – EJP

+0

echo $ PATH выводит правильное прежнее значение, и когда я меняю его на putenv, и его снова печатать, он не работает – markfiel

2

Когда вы начинаете процесс, он получает копию среды своего родителя. Вы меняете копию, которая исчезает, когда программа заканчивается.

+0

Я печатаю его в одной программе. Я знаю, что как только я закрою свою программу на C, она не будет постоянно изменяться, но пока я ее изменяю и печатаю. Он не изменился. Я все еще вижу прежнюю ПУТЬ. – markfiel

+0

Вы печатаете его в рамках той же программы, как? – EJP

+0

@EJP Я создаю оболочку, и в своей оболочке я вызываю echo $ PATH или echo PATH, и он печатает переменную PATH – markfiel

2

putenv() изменяет только окружающую среду для текущего процесса. Он не может изменить среду вызывающего процесса (оболочки)

+0

Я знаю, что и в среде, когда я ее перепечатываю, он не изменяется. – markfiel

Смежные вопросы