Как получить модифицированные переменные окружения с помощью программы на Mac на Mac с помощью Bash Terminal - PullRequest
0 голосов
/ 24 сентября 2010

Я хочу получить измененные переменные окружения, используя C программу на Mac, используя терминал bash. Как мне это сделать?

Если я использую getenv, я получу только системные переменные, определенные по умолчанию, но я не получу измененную. Зачем? И как бы это исправить?

Ответы [ 3 ]

1 голос
/ 24 сентября 2010
#include <stdio.h>
int main()
{
        setenv("PATH","/mypath",1);
        printf("%s\n",getenv("PATH"));
        return(0);
}

Вышеуказанные программные выходы:

/mypath

Если вы выполните env в bash после вашей программы на C, вы получите значение PATH, которое по умолчанию установлено для bash.

$ 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.

Edit:

Запись env.c как:

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

с последующим:

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

дает:

/bin

Я не понимаю, почему все должно быть иначе. (Вы сделали все шаги, которые я сделал выше?)

0 голосов
/ 06 марта 2014

Попробуйте это:

#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;
}
0 голосов
/ 12 августа 2013

Используя putenv(), setenv() and unsetenv(), мы влияем только на переменные окружения текущего и дочернего процессов, которые мы вызываем.мы не можем влиять на среду родительского процесса, который часто является оболочкой.Используя 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");

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...