我有以下简单程序:
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环境变量,无论如何都可以访问?
答案 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
。