我想使用bash終端在Mac上使用C程序獲取修改後的環境變量。我該怎麼做呢?如何使用bash終端在Mac上使用c程序獲取修改後的環境變量
如果我使用getenv
,我將只得到默認的系統定義的環境變量 - 但我沒有得到修改的。爲什麼?我該如何解決這個問題?
我想使用bash終端在Mac上使用C程序獲取修改後的環境變量。我該怎麼做呢?如何使用bash終端在Mac上使用c程序獲取修改後的環境變量
如果我使用getenv
,我將只得到默認的系統定義的環境變量 - 但我沒有得到修改的。爲什麼?我該如何解決這個問題?
#include <stdio.h>
int main()
{
setenv("PATH","/mypath",1);
printf("%s\n",getenv("PATH"));
return(0);
}
上述程序的輸出:
/mypath
然而,如果你在bash你的C程序後執行ENV,你會得到它在默認情況下對於bash設置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
我沒有看到爲什麼它應該是任何不同的。 (您是否執行了上面所做的所有步驟?)
通過使用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");
}
試試這個:
#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;
}
你是什麼意思的修改?由誰修改? – 2010-09-24 10:55:03
請跟進底部帖子,我提到了這個問題..幫助我,如果你知道答案 – Naruto 2010-09-24 11:42:53
'getenv()'函數是做到這一點的方式 - 你不能做你認爲你正在做的事情設置環境變量,或者以正在運行程序的方式來覆蓋其他地方的環境。 – llasram 2010-09-24 12:17:13