我正在尝试开发一个以 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 ~ >