2013-02-25 165 views
-2

我想在C程序中更改我的$ PATH。在此代碼之後,當我打印我的PATH變量時,它保持不變。這裏是我的方法,在C中設置環境變量

char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

我想將其打印出來回用echo $ PATH,它仍然顯示了前路,因爲它不會改變。

+1

您不能在同一個進程中使用'echo $ PATH'。你到底在說什麼? – EJP 2013-02-25 02:00:26

回答

6

請在設置完成後向我顯示獲取環境變量的方式。 我有下面的C代碼,我按預期工作:

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

int main() 
{ 
    char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

    char* pPath; 
    pPath = getenv("PATH"); 

    printf("%s", pPath); 

    return 0; 
} 

輸出是:/newfolder/hello/

我想將其打印出來回用echo $ PATH,它仍然顯示了前路徑,因爲它沒有改變。

是你在你的程序是這樣使用:

system("echo $PATH"); 

然後,你不會得到你已經設置的值,因爲該命令將被執行,從中仍然有你的shell進程評估初始環境變量設定值。

+0

我有我自己的外殼,我正在建設,我打電話echo $ PATH,它仍然打印舊值 – markfiel 2013-02-25 02:10:28

+0

@ user2098078然後,你是錯誤的構建。你的'echo $ PATH'代碼有問題。這不是一個真正的問題。你的觀點被這個答案完全否定了。 – EJP 2013-02-25 02:11:20

+0

echo $ PATH打印出正確的前值,當我用putenv將其更改並重新打印時,它不起作用 – markfiel 2013-02-25 02:13:32

2

當您啓動一個進程時,它會獲得父級環境的副本。您正在更改副本,程序結束時會消失。

+0

我在同一個程序中打印它。我知道,一旦我關閉了我的C程序,它就不會永久改變,但暫時一旦我改變了它,我就會打印它。它沒有改變。我仍然看到前PATH。 – markfiel 2013-02-25 01:56:00

+0

你在同一個程序中打印它如何? – EJP 2013-02-25 02:00:56

+0

@EJP我正在構建一個shell,並且在我的shell中,我調用了echo $ PATH或echo PATH,並且它打印了PATH變量 – markfiel 2013-02-25 02:08:46

2

putenv()只會改變正在運行的進程的環境。它不能改變調用進程的環境(shell)

+0

我知道,在我重印的環境中,它並沒有改變。 – markfiel 2013-02-25 01:56:32