【问题标题】:Using getenv function in Linux在 Linux 中使用 getenv 函数
【发布时间】:2011-03-15 16:31:11
【问题描述】:

我有以下简单的程序:

主函数() { char* v = getenv("TEST_VAR"); cout

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

TEST_VAR="2" 导出 TEST_VAR

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

【问题讨论】:

    标签: c++ linux environment-variables


    【解决方案1】:

    在我的系统(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】:

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

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

      export TEST_VAR="2"
      

      【讨论】:

      • .bash_profile 在我的计算机上不存在。我创建了新文件并将 TEST_VAR 移至其中。重启后,即使在 shell 中,TEST_VAR 也不可用。
      【解决方案3】:

      对不起,如果我太天真了,但 .bash_profile 只有在您将 bash 作为默认 shell 时才有用?

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

      祝你好运:)

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-21
          • 2019-05-16
          • 2012-05-17
          • 1970-01-01
          • 1970-01-01
          • 2014-06-10
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多