【问题标题】:c++: how to add an environmental variable only for the current process?c++:如何只为当前进程添加环境变量?
【发布时间】:2021-12-09 10:32:49
【问题描述】:

基本上问题就在标题中。我正在使用setenv() 函数在我的cpp 程序中设置环境变量,其中我还使用fork() exec() 链,它创建了一个子进程。问题是创建的变量也可以从此子进程访问。这使得 setenv() 等同于 shell 中的 export ABC=EFG 行为。我想要的是分离这个功能。我想单独设置变量ABC=EFG 并使其可用于子进程export ABC。如何做到这一点?

编辑:我决定在此处将我的评论添加到@SergeyA 的回答中。例如,在这种情况下,bash 如何处理环境变量?如果我编写 ABC=EFG 并调用仅由一行 echo $ABC 组成的脚本,它将不会打印任何内容,除非我之前调用了 export ABC。我只是在写一个 shell 并试图模仿这种行为。

【问题讨论】:

  • @Frank 已添加,感谢您的评论。
  • 普通的shell变量和环境变量是有区别的。 Shell 仅通过采用环境参数的 exec*() 函数之一将后者提供给它们执行的进程。

标签: c++ linux system-calls


【解决方案1】:

没有直接的方法可以做到这一点。调用exec总是会让子进程继承父进程的环境变量。

您可以使用exceve 显式指定对子进程可见的环境变量。

【讨论】:

  • 但是,例如,在这种情况下,bash 如何处理环境变量?如果我写ABC=EFG 并调用仅由一行echo $ABC 组成的脚本,除非我之前调用export ABC,否则它不会打印任何内容。我只是在写一个 shell 并试图模仿这种行为
  • @sauce 我没有看到它的源代码,但我想,它使用了类似的技术。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2019-07-28
相关资源
最近更新 更多