如何使用bash终端在Mac中使用c程序获取修改后的环境变量

时间:2010-09-24 10:49:12

标签: c linux macos bash unix

我想使用bash终端在Mac上使用C程序获取修改后的环境变量。我该怎么做?

如果我使用getenv,我将只获得默认的系统定义环境变量 - 但我没有得到修改后的环境变量。为什么?我该如何纠正这个?

3 个答案:

答案 0 :(得分:1)

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

上述程序输出:

/mypath

但是如果你在C程序之后在bash中执行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

我不明白为什么它应该有所不同。 (你做了我上面做过的所有步骤吗?)

答案 1 :(得分: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");

}

答案 2 :(得分: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;
}