2009-10-01 80 views
1

我試圖顯示,設置&從C程序修改PATH環境變量。我正在做這樣的事情: -

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

但我沒有得到結果。

回答

1

如果你想顯示$PATH,試試這個:

#include <stdlib.h> 

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

,如果你想修改它,使用setenv()putenv()

0

試試這個:

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

不,它不起作用。 – 2009-10-01 13:21:09

6

你應該使用getenv(),沒有必要去通過一個shell:

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

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

    return EXIT_SUCCESS; 
} 

但你不會能夠變化值。環境變量被繼承到子進程中,但子進程擁有自己的副本。無論使用何種語言編寫,您都無法從其他程序更改shell的環境。你當然可以改變你自己的過程的價值,但這不是你要求做的。

在shell本身中,您可以更改其當前的環境設置,但僅限於此。這就是爲什麼你需要使用「source」來運行改變環境的shell腳本。

+0

你很快。我會補充一點,你可以在相當豐富的手冊頁上輸入'man getenv'。 – phoku 2009-10-01 13:26:37

+0

謝謝。最讓我放慢速度的是在Markdown編輯器中輸入反斜槓的奇怪無能。 :) – unwind 2009-10-01 13:36:38

+0

放鬆,我從來沒有反斜槓的麻煩......但這一定是你的字符串沒有關閉單引號的原因;-) – 2009-10-01 13:45:59

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

... 

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

... 
0

已經給出了更好的解決方案,但通過解釋的方式; $ PATH變量由命令shell解析和轉換,而不是echo命令本身。已經建議的解決方案使用getenv()來取代環境變量的值。

要調用命令外殼來執行此:

system("echo $PATH") ; 

但溶液是有點重量級因爲它調用一個新的工藝和整個命令處理器只是爲了做到這一點。