実行中のセッションの環境変数を取得する

実行中のセッションの環境変数を取得する

はい、質問が少し混乱していることを知っています。 「セッションのコマンドラインからアクセスできる変数」と言いました。

DBus login1イベントを受け取るために、ファイルシステム上でupstartによって自動的に実行されるアプリケーションを作成しているため、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

存在する強く打つこれ出口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"
...

関連情報