我有一个~/.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 ++二进制文件中访问。
因此,我有两个问题:
PATH
而另一个变量 - 不是?~/.profile
传递给C ++二进制文件?