繁体   English   中英

从交流程序执行“ echo $ PATH”?

[英]Executing “echo $PATH” from a c program?

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

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

但是我没有得到结果。

您应该使用getenv () ,无需遍历shell:

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

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

   return EXIT_SUCCESS;
}

但是您将无法 更改该值。 环境变量被继承到子进程中,但是子进程拥有自己的副本。 不管使用哪种语言编写,都无法从其他程序更改外壳的环境。 您当然可以更改自己的流程的价值,但这不是您要执行的。

在外壳程序本身中,您可以更改其当前环境设置,但只能在此更改。 这就是为什么您需要使用“源代码”来运行更改环境的Shell脚本的原因。

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

#include <stdlib.h>

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

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

尝试这个:

char *cmd[] = { "$PATH", (char *)0 };
if (execlp("echo", cmd) == -1)
#include <stdio.h>
#include <stdlib.h>

...

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

...

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

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

system( "echo $PATH" ) ;

但是该解决方案在某种程度上是重量级的,因为它调用了一个新进程,而整个命令处理器只是这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM