环境变量在C ++二进制文件中不可见

时间:2016-04-27 16:41:13

标签: bash environment-variables

我有一个~/.profile,内容如下:

PATH=$PATH:/home/user/custom_binaries
SAMPLE_VAR="value"

登录终端后,我可以看到两者:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/custom_binaries
$ echo $SAMPLE_VAR
value

但是,当我启动C ++二进制文件test.a

#include <iostream>
#include <cstdlib>

int main()
{
    if(const char* env_p = std::getenv("PATH"))
        std::cout << "PATH is: " << env_p << '\n';
    if(const char* env_p = std::getenv("SAMPLE_VAR"))
        std::cout << "SAMPLE_VAR is: " << env_p << '\n';
}

我只看到PATH

$ ./test.a
PATH is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/custom_binaries
$

请注意,我对PATH的修改是可见的。

如果我删除~/.profile并重新登录,则路径将成为默认路径:

$ ./test.a
PATH is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$

当我产生另一个shell时也是如此:

$ bash
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/custom_binaries
$ echo $SAMPLE_VAR

$ exit

如果我将~/.profile复制为~/.bashrc,那么我可以从生成的shell中访问SAMPLE_VAR,但仍然不能从C ++二进制文件中访问。

因此,我有两个问题:

  1. 如何正确看到PATH而另一个变量 - 不是?
  2. 如何将变量从~/.profile传递给C ++二进制文件?

0 个答案:

没有答案