2010-07-14 121 views
3
getenv的功能

我有这个下面的程序:在Linux中使用

 
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环境变量,在任何情况下都可以访问?

回答

3

在我的系统(Fedora 13的),你可以通过在/添加它们使全系统的环境变量等/的profile.d /。

因此,举例来说,如果你在/etc/profile.d/my_system_wide.sh内容添加到文件

SYSTEM_WIDE="system wide" 
export SYSTEM_WIDE 

然后打开另一个终端应该采购它无论是谁,用户在打开的终端

echo $SYSTEM_WIDE 
system_wide 
+0

谢谢,这个伎俩。 – 2010-07-14 06:23:09

2

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

而且,因为你正在使用bash,你可以结合出口和设置在一条语句:

export TEST_VAR="2" 
+0

.bash_profile在我的电脑上不存在。我创建了新文件并将TEST_VAR移到了它上面。重新启动后,即使在shell中TEST_VAR也不可用。 – 2010-07-14 06:08:50

1

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

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

2

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

我'有时'使用Linux,大多使用ksh。我有.profile所以可能你应该检查。*配置文件并在那里输出变量。

祝你好运:)