执行;echo$PATH“;来自c程序?

执行;echo$PATH“;来自c程序?,c,linux,path,exec,C,Linux,Path,Exec,我试图显示、设置和修改C程序中的PATH环境变量。我正在做这样的事情:- char *cmd[] = { "echo", "$PATH", (char *)0 }; if (execlp("echo", *cmd) == -1) 但是我没有得到结果。试试这个: char *cmd[] = { "$PATH", (char *)0 }; if (execlp("echo", cmd) == -1) #include <stdlib.h> printf("PATH: %s\n",g

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

char *cmd[] = { "echo", "$PATH", (char *)0 };
if (execlp("echo", *cmd) == -1)
但是我没有得到结果。

试试这个:

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

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

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

printf("PATH: %s\n",getenv("PATH"));
您应该使用
()
,无需通过外壳:

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

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

   return EXIT_SUCCESS;
}
#包括
#包括
内部主(空)
{
printf(“路径=“%s”\n”,getenv(“路径”);
返回退出成功;
}
但您将无法更改该值。环境变量继承到子进程中,但子进程有自己的副本。您不能从不同的程序更改shell的环境,无论它是用哪种语言编写的。当然,您可以更改自己流程的价值,但这不是您要求的

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

您应该使用
()
,无需通过shell:

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

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

   return EXIT_SUCCESS;
}
#包括
#包括
内部主(空)
{
printf(“路径=“%s”\n”,getenv(“路径”);
返回退出成功;
}
但您将无法更改该值。环境变量继承到子进程中,但子进程有自己的副本。您不能从不同的程序更改shell的环境,无论它是用哪种语言编写的。当然,您可以更改自己流程的价值,但这不是您要求的


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

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

#include <stdlib.h>

printf("PATH: %s\n",getenv("PATH"));
#包括
printf(“路径:%s\n”,getenv(“路径”);

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

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

#include <stdlib.h>

printf("PATH: %s\n",getenv("PATH"));
#包括
printf(“路径:%s\n”,getenv(“路径”);
如果要修改它,请使用
setenv()
putenv()

\include
#包括
...
char*pPath;
pPath=getenv(“路径”);
如果(pPath!=NULL)
printf(“当前路径为:%s”,pPath);
putenv(“PATH=somepath”);
...
#包括
#包括
...
char*pPath;
pPath=getenv(“路径”);
如果(pPath!=NULL)
printf(“当前路径为:%s”,pPath);
putenv(“PATH=somepath”);
...

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

要调用命令shell来执行此操作,请执行以下操作:

system( "echo $PATH" ) ;

但是这个解决方案有点重,因为它调用了一个新的进程和整个命令处理器来完成这个任务;$PATH变量由命令shell解析和转换,而不是echo命令本身。已经建议的解决方案使用getenv()来获取环境变量的值

要调用命令shell来执行此操作,请执行以下操作:

system( "echo $PATH" ) ;

但是这个解决方案有点重,因为它调用了一个新的进程和整个命令处理器来完成这个任务。

你很快。我要补充的是,您可以键入
mangetenv
以查看信息丰富的手册页面。谢谢。最让我慢下来的是奇怪的无法在markdown编辑器中键入反斜杠放松,我从来没有遇到过反斜杠的问题。。。但这一定是字符串中没有结束单引号的原因;-)@黑客:谢谢,修正了。每当我在答案编辑器中按反斜杠时,它会立即被
此处输入代码
,并选择文本部分,以便下一次按键将其替换。展开。奇怪的我从来没有遇到过。你跑得很快。我要补充的是,您可以键入
mangetenv
以查看信息丰富的手册页面。谢谢。最让我慢下来的是奇怪的无法在markdown编辑器中键入反斜杠放松,我从来没有遇到过反斜杠的问题。。。但这一定是字符串中没有结束单引号的原因;-)@黑客:谢谢,修正了。每当我在答案编辑器中按反斜杠时,它会立即被
此处输入代码
,并选择文本部分,以便下一次按键将其替换。展开。奇怪的我(还)从未发生过这种事。