2013-02-25 164 views
-2

我想在C程序中更改我的$ PATH。在此代码之后,当我打印我的PATH变量时,它保持不变。这里是我的方法,在C中设置环境变量

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

我想将其打印出来回用echo $ PATH,它仍然显示了前路,因为它不会改变。

+1

您不能在同一个进程中使用'echo $ PATH'。你到底在说什么? – EJP 2013-02-25 02:00:26

回答

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/

我想将其打印出来回用echo $ PATH,它仍然显示了前路径,因为它没有改变。

是你在你的程序是这样使用:

system("echo $PATH"); 

然后,你不会得到你已经设置的值,因为该命令将被执行,从中仍然有你的shell进程评估初始环境变量设定值。

+0

我有我自己的外壳,我正在建设,我打电话echo $ PATH,它仍然打印旧值 – markfiel 2013-02-25 02:10:28

+0

@ user2098078然后,你是错误的构建。你的'echo $ PATH'代码有问题。这不是一个真正的问题。你的观点被这个答案完全否定了。 – EJP 2013-02-25 02:11:20

+0

echo $ PATH打印出正确的前值,当我用putenv将其更改并重新打印时,它不起作用 – markfiel 2013-02-25 02:13:32

2

当您启动一个进程时,它会获得父级环境的副本。您正在更改副本,程序结束时会消失。

+0

我在同一个程序中打印它。我知道,一旦我关闭了我的C程序,它就不会永久改变,但暂时一旦我改变了它,我就会打印它。它没有改变。我仍然看到前PATH。 – markfiel 2013-02-25 01:56:00

+0

你在同一个程序中打印它如何? – EJP 2013-02-25 02:00:56

+0

@EJP我正在构建一个shell,并且在我的shell中,我调用了echo $ PATH或echo PATH,并且它打印了PATH变量 – markfiel 2013-02-25 02:08:46

2

putenv()只会改变正在运行的进程的环境。它不能改变调用进程的环境(shell)

+0

我知道,在我重印的环境中,它并没有改变。 – markfiel 2013-02-25 01:56:32