![](/img/trans.png)
[英]C program for executing 'echo' on a target with no /bin directory
[英]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.