代码之家  ›  专栏  ›  技术社区  ›  Alex F

在Linux中使用getenv函数

  •  3
  • Alex F  · 技术社区  · 14 年前

    我有以下简单程序:

    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,它将输出空值。我认为这是因为测试变量只在bash shell中定义。如何创建持久的Linux环境变量,在任何情况下都可以访问它?

    4 回复  |  直到 14 年前
        1
  •  3
  •   sashang    14 年前

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

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

    SYSTEM_WIDE="system wide"
    export SYSTEM_WIDE
    

    然后打开另一个终端,不管用户是谁打开终端,它都应该对其进行源代码管理。

    echo $SYSTEM_WIDE
    system_wide
    
        2
  •  2
  •   R Samuel Klatchko    14 年前

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

    此外,由于您使用的是bash,因此可以将export和set组合在一条语句中:

    export TEST_VAR="2"
    
        3
  •  2
  •   DeltaRogue    14 年前

    抱歉,如果我很天真,但不是。bash_配置文件只有在您将bash作为默认shell运行时才有用吗?

    我“有时”使用Linux,而且主要使用ksh。我有.profile,所以你应该检查一下.profile并在那里导出变量。

    祝你好运:

        4
  •  1
  •   Chris Dodd    14 年前

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

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