从 C++ 中获取 shell 环境变量

Posted

技术标签:

【中文标题】从 C++ 中获取 shell 环境变量【英文标题】:sourcing shell environmental variables from c++ 【发布时间】:2014-10-02 13:04:23 【问题描述】:

假设我想使用 exec() 和 fork() 从守护进程(以 root 身份运行)生成一个进程,并且我还想在使用 seteuid() 和 setegid() 生成进程之前模拟不同的用户.如果我还想继承为该特定用户设置的环境变量,您建议这样做的最佳方式是什么?还有另一种不调用 /sbin/sh 和/或 sudo 的方法吗?

希望在 Linux 和 Mac OS X 上这样做!

谢谢!

【问题讨论】:

相关:***.com/questions/17929414/… 我知道 setenv 的存在,我的意思是获取 .bash_profile 或任何默认用户 shell 中已有内容的最佳方式是什么 【参考方案1】:

没有“为特定用户设置环境变量”之类的东西。变量没有存储在某个列表中,它们是由登录时运行的程序设置的。您将不得不运行相同的脚本。所以只需exec 一个带有-l(登录shell)的shell,并让它运行(使用-c)您之前传递给exec 的所需命令。

请注意,这可能仍然无法复制整个环境。一些变量(例如DISPLAY)通常由以另一种方式运行的程序设置。


要获得最后一个孩子的PID,请确保在-c传递的命令中使用exec

# sh -l -c "exec sleep 50" &
[1] 30331
# ps -a
  PID TTY          TIME CMD
30331 pts/1    00:00:00 sleep

【讨论】:

并从用户配置文件中获取默认 shell(getpwnamgetpwuid 这样,我不知道我用 shell 生成的进程的 PID,所以我无法控制它,我需要设置一个进程检测来获取子 PID .让 shell 产生“设置”并使用 setenv 转储和重置变量可能是一个不错的选择?

以上是关于从 C++ 中获取 shell 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Shell如何从.env文件设置环境变量

如何在makefile中获取shell环境变量?

[C++] 系统环境变量和用户变量同名 如何才能获取系统环境变量

Linux编程 11(shell全局环境变量与局变环境变量)

在 C++ 中获取环境变量 - 我得到 NULL

Bash编程013——环境变量