![](/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.