Использование функции getenv в Linux - PullRequest
3 голосов
/ 14 июля 2010

У меня есть следующая простая программа:

int main()
{
    char* v = getenv("TEST_VAR");
    cout << "v = " << (v==NULL ? "NULL" : v) << endl;
    return 0;
}

Эти строки добавляются в файл .bashrc:

TEST_VAR="2"
export TEST_VAR

Теперь, когда я запускаю эту программу из окна терминала (Ubuntu10.04), она печатает v = 2. Если я запускаю программу другим способом: с помощью программы запуска или из Eclipse, она печатает NULL.Я думаю, это потому, что TEST_VAR определяется только внутри оболочки bash.Как я могу создать постоянную переменную среды Linux, которая доступна в любом случае?

Ответы [ 4 ]

3 голосов
/ 14 июля 2010

В моей системе (Fedora 13) вы можете создавать системные переменные среды, добавляя их в /etc/profile.d/.

Так, например, если вы добавляете это в файл в / etc / profile.d / my_system_wide.sh

SYSTEM_WIDE="system wide"
export SYSTEM_WIDE

и затем открыть другой терминал, он должен получать его независимо от того, кто пользователь открывает терминал

echo $SYSTEM_WIDE
system_wide
2 голосов
/ 14 июля 2010

Извините, если я наивен, но бесполезен .bash_profile, только если вы используете bash в качестве оболочки по умолчанию?

Я "иногда" использую Linux и в основном использую ksh.У меня есть .profile, так что, может быть, вы должны проверить. * Профиль и экспортировать переменную туда.

Удачи:)

2 голосов
/ 14 июля 2010

Добавьте это к .bash_profile (находится в вашем домашнем каталоге).Вам нужно будет выйти и снова войти, чтобы он вступил в силу.

Кроме того, поскольку вы используете bash, вы можете объединить экспорт и задать в одном выражении:

export TEST_VAR="2"
1 голос
/ 14 июля 2010

В Linux нет общесистемной переменной среды. Каждый процесс имеет свою среду. Теперь по умолчанию каждый процесс наследует свое окружение от своего родителя, так что вы можете получить что-то похожее на общесистемную среду, гарантируя, что переменная установлена ​​в предке каждого интересующего процесса. Затем, пока никакой другой процесс не изменит этот var, он будет установлен для каждого интересующего процесса.

Другие ответы здесь дают различные способы ранней установки переменных. Например, .bash_profile устанавливает его в каждом процессе входа в систему, который запускает пользователь, который является конечным родителем каждого процесса, который он запускает после входа в систему. /etc/profile читается каждым логином bash каждым пользователем.

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