在 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,您应该会看到预期的输出.
我正在尝试使用下面的简单 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,您应该会看到预期的输出.