在 Eclipse 中使用 C++ 在 Linux 中获取环境变量 $PATH

Getting Environment Variable $PATH in Linux using C++ in Eclipse

我正在尝试使用下面的简单 C++ 程序获取 Linux 中环境变量 $PATH 的值:

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    // get PATH using pipe
    FILE* pip = popen("exec bash -c 'echo $PATH'", "r");
    if (!pip)
    {
        printf("can not open pipe!");
        return 1;
    }

    char lineversion[600];
    memset (lineversion, 0, sizeof(lineversion));
    if (!fgets(lineversion, sizeof(lineversion), pip))
    {
        printf("fgets error!");
        return 1;
    }

    std::cout << lineversion << std::endl;

    // get PATH using getenv
    char* pPath = getenv ("PATH");
    std::cout << pPath << std::endl;
}

我使用了两种不同的方法:使用管道和使用 getenv 方法。他们都输出这个:

/opt/texbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/netbeans-7.3.1/bin

有趣的是,PATH 的实际值有所不同!

为什么我的 C++ 程序显示不同的 PATH 值?

编辑 1:我是 运行 我在 Eclipse IDE 中的 C++ 程序。

编辑 2:直接编译程序(没有 Eclipse IDE)显示正确的 PATH 值!

编辑 3:我也在 here 中找到了答案。

进程从创建它的进程继承环境。

这就是 Linux 以及许多其他操作系统的工作方式。

如果您从 Eclipse 启动程序,该程序将继承 Eclipse 的环境。
如果您从 shell 启动程序,该程序会继承 shell 的环境,包括对 PATH 的修改,这些修改在您的初始化文件中。

由于 Eclipse 从启动它的任何进程继承了 环境,如果您从 shell 而不是通过桌面 GUI 启动 Eclipse,您应该会看到预期的输出.