当 root 时,获取另一个用户的 ~/.bashrc 并获取所有环境变量

当 root 时,获取另一个用户的 ~/.bashrc 并获取所有环境变量

我正在尝试开发一个以 root 身份运行的小型系统应用程序。在此应用程序中,我想列出默认用户的所有环境变量(不是$USER,而是调用以 root 身份运行该应用程序的用户,即$SUDO_USER)。由于该应用程序不是从终端运行,而是依赖于Qt环境中C打开的进程,因此我想首先准备环境,然后获取该子进程中的环境变量。

我想要完成的任务相当于:

  • 从 root 更改为用户
  • 源 ~/.bashrc 或 ~/.profile 等。
  • printenv [并在脚本之后获取它]
  • 再次更改为root

我在网上发现并阅读了一些解决方法,但我发现这些解决方法(用于以其他用户身份运行命令)对我想要实现的目标没有帮助。

我需要一句台词来完成上述任务。我现在所拥有的如下(以 root 身份运行):

sudo -i -u user sh -c '. /home/user/.bashrc && printenv > /tmp/user.env'

虽然我可以看到一些环境变量,但我看不到从 /home/user/.bashrc 导出的自定义变量

任何指导表示赞赏,

如果缺少信息,请告诉我。

亲切的问候,

答案1

我已经尝试过你的命令,在我看来,它只需要查找即可。

sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

我用过来源命令而不是.

含有~/.bashrc

[ws] root ~ >cat /home/user1/.bashrc 
# .bashrc
...
export TESTENV="test"
...

执行您的命令并显示以下内容/tmp/user.env

[ws] root ~ >sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

[ws] root ~ >cat /tmp/user.env 
...
SHELL=/bin/bash
USER=user1
SUDO_COMMAND=/bin/bash -c sh -c source\ ~/.bashrc\ &&\ printenv\ >\ 
...
TESTENV=test
...
[ws] root ~ >

相关内容