簡體   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