실행 중인 세션의 환경 변수 가져오기

실행 중인 세션의 환경 변수 가져오기

예, 질문이 약간 혼란스럽다는 것을 알고 있습니다. 방금 "세션의 명령줄에서 액세스할 수 있는 변수"라고 말했습니다.

DBus login1 이벤트를 수신하기 위해 파일 시스템에서 upstart에 의해 자동으로 실행되는 애플리케이션을 작성 중이므로 루트에서 실행됩니다. 그러나 사용자가 로그인한 후에는 다른 신호를 확인하기 위해 해당 사용자의 세션 버스를 들어야 합니다. 그래서 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

존재하다세게 때리다이것출구Action에는 모든(?) 변수가 표시됩니다.

내보내기 - 내보낸 쉘 변수의 이름입니다. -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"
...

관련 정보