获取正在运行的会话的环境变量

获取正在运行的会话的环境变量

是的,我知道这个问题有点令人困惑,我只是说“可以从会话的命令行访问的变量”。

我正在编写一个由新贵在文件系统上自动运行的应用程序,以侦听 DBus login1 事件,因此它从 root 运行。但是在任何用户登录后,我需要监听他的会话总线以获取其他信号。这就是为什么我想获取DBUS_SESSION_BUS_ADDRESS当前用户。

其他获取方法DBUS_SESSION_BUS_ADDRESS对我不起作用,例如~/.dbus/session-bus/*文件在某种程度上已经过时(?),即它们的内容与环境中的内容不匹配。

答案1

听起来您正在尝试在创建每个进程时从已运行的脚本中动态查找用户在其环境中拥有的变量?

我用来解决这个问题的方法是找到PID,然后使用PID从/proc/PID/environ中解析进程环境变量。仅当 PID 继承变量时这才有效。

pid=1234         # replace with pid finding method
unset thisbus    # in case this snippet gets pasted into a loop
[ -f /proc/$pid/environ ] && thisbus="$(sed 's/^.*\x0DBUS_SESSION_BUS_ADDRESS=\([^\x0]*\)\x0.*$/\1/' /proc/$pid/environ)"
[ -z "$thisbus" ] && echo "not found" || echo "$thisbus"

答案2

除了显而易见的回声

[sheepdog@dogpoung ~]$ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-cdhvJBSPVi,guid=5451e8f0f49db972ccc8f845560efd7e

巴什出口动作显示了所有(?)变量。

export - 导出的 shell 变量的名称。也可以指定为-e。

[sheepdog@dogpoung ~]$ export
declare -x COLORTERM="gnome-terminal"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-cdhvJBSPVi,guid=5451e8f0f49db972ccc8f845560efd7e"
declare -x DESKTOP_SESSION="gnome-classic"
declare -x DISPLAY=":0"
declare -x GDMSESSION="gnome-classic"
declare -x GDM_LANG="en_US.utf8"
declare -x GJS_DEBUG_OUTPUT="stderr"
...

相关内容