我正在尝试使用一个简单的 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 的环境,包括对您在 init 文件中的 PATH
的修改。
由于 Eclipse 从启动它的任何进程继承它的环境,如果您从 shell 而不是通过桌面 GUI 启动 Eclipse,您应该会看到预期的输出。
关于c++ - 在 Eclipse 中使用 C++ 在 Linux 中获取环境变量 $PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326868/