1

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

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

但我没有得到结果。

4

5 回答 5

6

您应该使用getenv(),无需通过外壳:

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

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

   return EXIT_SUCCESS;
}

但是您将无法更改值。环境变量被继承到子进程中,但子进程有自己的副本。您不能从不同的程序更改 shell 的环境,无论它是用哪种语言编写的。您当然可以更改自己的流程值,但这不是您要求做的。

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

于 2009-10-01T13:20:20.207 回答
1

如果你想显示$PATH,试试这个:

#include <stdlib.h>

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

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

于 2009-10-01T13:20:30.757 回答
0

尝试这个:

char *cmd[] = { "$PATH", (char *)0 };
if (execlp("echo", cmd) == -1)
于 2009-10-01T13:16:36.680 回答
0

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

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

system( "echo $PATH" ) ;

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

于 2009-10-01T17:45:12.953 回答
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");

...
于 2009-10-01T13:21:27.257 回答