从c程序执行“echo $ PATH”?

时间:2009-10-01 13:15:08

标签: c linux path exec

我正在尝试展示,设置&从C程序修改PATH环境变量。我正在做这样的事情: -

char *cmd[] = { "echo", "$PATH", (char *)0 };
if (execlp("echo", *cmd) == -1)

但我没有得到结果。

5 个答案:

答案 0 :(得分:6)

你应该使用getenv(),不需要通过shell:

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

int main(void)
{
   printf("PATH='%s'\n", getenv("PATH"));

   return EXIT_SUCCESS;
}

环境变量继承到子进程,但子进程有自己的副本。无论使用哪种语言编写,都无法从其他程序更改shell的环境。您当然可以更改自己的流程价值,但这不是您要求的。

在shell本身中,您可以更改其当前的环境设置,但仅限于此处。这就是您需要使用“source”来运行更改环境的shell脚本的原因。

答案 1 :(得分:1)

如果您想显示$PATH,请尝试以下操作:

#include <stdlib.h>

printf("PATH: %s\n",getenv("PATH"));

如果您想修改它,请使用setenv()putenv()

答案 2 :(得分:0)

试试这个:

char *cmd[] = { "$PATH", (char *)0 };
if (execlp("echo", cmd) == -1)

答案 3 :(得分:0)

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

...

char *pPath;
pPath = getenv("PATH");
if (pPath!=NULL)
    printf ("The current path is: %s",pPath);
putenv("PATH=somepath");

...

答案 4 :(得分:0)

已经给出了更好的解决方案,但是作为解释; $ PATH变量由命令shell解析和转换,而不是echo命令本身。已经建议的解决方案使用getenv()来获取环境变量的值。

要调用命令shell来执行此操作:

system( "echo $PATH" ) ;

但是这个解决方案有点重量级,因为它调用一个新进程而整个命令处理器就是这样做的。