c ++:如何仅为当前进程添加环境变量?
c++: how to add an environmental variable only for the current process?
基本上问题就在标题里。我正在使用 setenv()
函数在我的 cpp 程序中设置环境变量,其中我还使用 fork()
exec()
链,它创建了一个 child 进程。问题是创建的变量也可以从此 child 进程访问。这使得 setenv()
等同于 shell 中的 export ABC=EFG
行为。我想要的是分离这个功能。我想单独设置变量 ABC=EFG
并使其可用于 child 进程 export ABC
。如何做到这一点?
编辑: 我决定在这里将我的评论添加到@SergeyA 的回答中。例如,bash 在这种情况下如何处理环境变量?如果我编写 ABC=EFG 并调用仅由一行 echo $ABC 组成的脚本,除非我之前调用了 export ABC,否则它不会打印任何内容。我只是在写一个 shell 并试图模仿这种行为。
没有直接的方法可以做到这一点。调用exec
总是会让子进程继承父进程的环境变量。
您可以使用 exceve
显式指定对子进程可见的环境变量。
基本上问题就在标题里。我正在使用 setenv()
函数在我的 cpp 程序中设置环境变量,其中我还使用 fork()
exec()
链,它创建了一个 child 进程。问题是创建的变量也可以从此 child 进程访问。这使得 setenv()
等同于 shell 中的 export ABC=EFG
行为。我想要的是分离这个功能。我想单独设置变量 ABC=EFG
并使其可用于 child 进程 export ABC
。如何做到这一点?
编辑: 我决定在这里将我的评论添加到@SergeyA 的回答中。例如,bash 在这种情况下如何处理环境变量?如果我编写 ABC=EFG 并调用仅由一行 echo $ABC 组成的脚本,除非我之前调用了 export ABC,否则它不会打印任何内容。我只是在写一个 shell 并试图模仿这种行为。
没有直接的方法可以做到这一点。调用exec
总是会让子进程继承父进程的环境变量。
您可以使用 exceve
显式指定对子进程可见的环境变量。