2010-09-24 35 views
-1

我想使用bash終端在Mac上使用C程序獲取修改後的環境變量。我該怎麼做呢?如何使用bash終端在Mac上使用c程序獲取修改後的環境變量

如果我使用getenv,我將只得到默認的系統定義的環境變量 - 但我沒有得到修改的。爲什麼?我該如何解決這個問題?

+0

你是什麼意思的修改?由誰修改? – 2010-09-24 10:55:03

+0

請跟進底部帖子,我提到了這個問題..幫助我,如果你知道答案 – Naruto 2010-09-24 11:42:53

+0

'getenv()'函數是做到這一點的方式 - 你不能做你認爲你正在做的事情設置環境變量,或者以正在運行程序的方式來覆蓋其他地方的環境。 – llasram 2010-09-24 12:17:13

回答

1
#include <stdio.h> 
int main() 
{ 
     setenv("PATH","/mypath",1); 
     printf("%s\n",getenv("PATH")); 
     return(0); 
} 

上述程序的輸出:

/mypath 

然而,如果你在bash你的C程序後執行ENV,你會得到它在默認情況下對於b​​ash設置PATH值。

$ env 
... 
PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/bin 
... 

這是因爲環境變量僅針對其運行C的程序,特別是過程改性,&不是運行bash的過程。

編輯:

寫作env.c爲:

#include <stdio.h> 
int main() 
{ 
     printf("%s\n",getenv("PATH")); 
     return(0); 
} 

依次爲:

$ gcc env.c 
$ export PATH=/bin 
$ ./a.out 

給出:

/bin 

我沒有看到爲什麼它應該是任何不同的。 (您是否執行了上面所做的所有步驟?)

+0

我已經在我的bash終端中修改了「PATH」。 現在,我想使用c-program.how來顯示修改的「PATH」。 – Naruto 2010-09-24 11:42:02

+0

在我回答您的問題之前,您能否正確解釋此練習的目的? – 2010-09-24 11:53:15

+0

只是想知道,如果我使用bash終端修改了任何環境變量,我可以使用C程序獲得環境變量的修改值嗎?可能嗎? – Naruto 2010-09-24 12:01:05

0

通過使用putenv(), setenv() and unsetenv()我們隻影響我們調用的當前進程和子進程的環境變量。我們不能影響父進程的環境,這通常是一個shell。 通過使用extern char** environ;我們無法訪問已修改的環境變量,但用於添加或修改環境變量的 程序可以使用getenv()函數訪問這些變量。 例如....

#include<stdio.h> 
#include<stdlib.h>  
main() 
{ 

    if(putenv("COLOR=BROWN")==0) 
     printf("Successful\n"); 
    else 
     printf("Unsuccessful\n"); 

//If we put an environment variable it will only VISIBLE THE PROGRAMME BY WHICH IT HAS BEEN set 

    char *result; 
    result = getenv("COLOR");//char* getenv(const char*) 
    if(result!=NULL)//if environment variable does not exist result will be NULL 
     puts(result); 
    else 
     printf("failed to get environment variable\n"); 

//Modify this environment variable 

    if(putenv("COLOR=RED")==0) 
     printf("changing Successful\n"); 
    else 
     printf("Unsuccessful\n"); 

    result = getenv("COLOR"); 
    if(result!=NULL) 
     puts(result); 
    else 
     printf("failed to get environment variable\n"); 

//Verify with existing env variables 

    if(putenv("PWD=NONE")==0) 
     printf("changing Successful\n"); 
    else 
     printf("Unsuccessful\n"); 

    result = getenv("PWD"); 
    if(result!=NULL) 
     puts(result); 
    else 
     printf("failed to get environment variable\n"); 

} 
0

試試這個:

#include <stdio.h> 

main(int *a, char *b[], char *c[]) 
{ 
    int ctr; 

    for (ctr = 0; c[ctr]; ctr++) 
    { 
     printf("%s\n", c[ctr]); 
    } 

    return 0; 
} 
相關問題