在Linux中使用getenv函数

时间:2010-07-14 05:28:04

标签: c++ linux environment-variables

我有以下简单程序:

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

这些行被添加到.bashrc文件中:

TEST_VAR="2"
export TEST_VAR

现在,当我从终端窗口(Ubuntu 10.04)运行此程序时,它打印v = 2.如果我以另一种方式运行程序:使用启动程序或从Eclipse,它打印NULL。我认为这是因为TEST_VAR仅在bash shell中定义。如何创建持久的Linux环境变量,无论如何都可以访问?

4 个答案:

答案 0 :(得分:3)

在我的系统(Fedora 13)上,您可以通过在/etc/profile.d /下添加它们来创建系统范围的环境变量。

例如,如果将其添加到/etc/profile.d/my_system_wide.sh中的文件

SYSTEM_WIDE="system wide"
export SYSTEM_WIDE

然后打开另一个终端,无论用户打开终端是谁,它都应该来源

echo $SYSTEM_WIDE
system_wide

答案 1 :(得分:2)

将其添加到.bash_profile(在您的主目录中找到)。您需要注销并重新登录才能使其生效。

此外,由于您使用的是bash,因此可以将导出和设置组合在一个语句中:

export TEST_VAR="2"

答案 2 :(得分:2)

对不起,如果我天真但是.bash_profile只有在你将bash作为默认shell运行时才有用吗?

我有时'使用Linux并且大多使用ksh。我有.profile所以你应该检查。* profile并在那里导出变量。

祝你好运:)

答案 3 :(得分:1)

Linux上没有系统范围的环境变量。每个流程都有自己的环境。现在默认情况下,每个进程都从其父进程继承其环境,因此您可以通过确保在每个感兴趣的进程的祖先中设置var来获得类似系统范围的环境。然后,只要没有其他进程更改该var,每个感兴趣的进程都会设置它。

这里的其他答案提供了各种早期设置变量的方法。例如,.bash_profile在用户运行的每个登录进程中设置它,这是他们登录后运行的每个进程的最终父进程。 每个用户的每次bash登录都会读取/etc/profile