bash - 如何获取父进程的用户?
问题描述
我正在编写一个程序,它使用自己的配置文件(在 /etc/program/ 和 ~/.config/program/ 中)问题是有时它需要以 root 身份执行(所以大部分时间使用 sudo)并在这种情况〜/ .config / program实际上在root的目录中(在我的情况下是/root)我希望我的程序使用用户的配置文件,即使与sudo一起使用。我的想法是首先获取父程序的 PID(在我的情况下为 BASH)——通常由普通用户执行——然后获取执行父程序的用户的名称。我很容易找到如何获取 PPID,但我没有找到如何找到用户名。
我想象一个像这样的脚本:
parents_name=$(echo $PPID | *command_which_gives_the_name_from_a_PID*)
. /home/$parents_name/.config/program # includes the user's config file
我希望有人有一个遮阳篷!
解决方案
sudo
将调用用户的名称添加到命令的环境中。
. /home/$SUDO_USER/.config/program
$HOME
可能已经和 一样了/home/$SUDO_USER
,但是有太多的配置方法sudo
使它成为目标用户的主目录。
但是,这会使您的脚本依赖于被. sudo
最好是明确的并将所需配置的路径作为参数传递给脚本。就像是
sudo theScript "$HOME/.config/program"
和
. "$1"
推荐阅读
- oracle - Visual Studio 2017 - 数据连接 - 添加 Oracle DB
- json - React TypeError:循环对象值嵌套
- mysql - /usr/bin/docker-current: 解析参考时出错.. 参考格式无效
- r - Use dynamic names for CJ in data.table
- android - 如何调整fab按钮内的图标大小
- angularjs - $uibModal 在第一次点击时没有加载正确的内容
- java - 在 kotlin/Java 中设计 Compose 对象
- checkbox - 如何在 Flutter 中为 Checkbox 添加标签(标题文本)?
- javascript - 在 Firebase 中添加便利功能
- javascript - 用两个日期之间的日期填充对象数组