Obtém variáveis de ambiente da sessão em execução

4

Sim, eu sei que esta questão é um pouco confusa, quero dizer "as variáveis que são acessíveis a partir da linha de comando da sessão".

Eu estou escrevendo um aplicativo que é executado automaticamente por upstart no sistema de arquivos, para ouvir eventos DBus login1 e, portanto, é executado a partir do root. Mas depois de qualquer usuário entrar, eu preciso ouvir o seu bus de sessão para sinais adicionais. É por isso que quero obter DBUS_SESSION_BUS_ADDRESS do usuário atual.

Outros métodos de obter DBUS_SESSION_BUS_ADDRESS não funcionam para mim, por exemplo, ~/.dbus/session-bus/* arquivos estão desatualizados (?), ou seja, seu conteúdo não corresponde a um no ambiente.

    
por Alexander Yushkov 08.10.2015 / 18:00

2 respostas

3

Parece que você está tentando encontrar dinamicamente a variável que um usuário tem em seu ambiente a partir de um script já em execução à medida que cada processo é criado?

Um método que usei para resolver isso é encontrar o PID e usar o PID para analisar as variáveis de ambiente do processo de / proc / PID / environ. Isso só funciona se o PID herdar as variáveis.

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.*$//' /proc/$pid/environ)"
[ -z "$thisbus" ] && echo "not found" || echo "$thisbus"
    
por 08.10.2015 / 19:09
0

Além do óbvio echo

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

No bash , a ação export mostra todas as variáveis (?) das variáveis.

export - Names of exported shell variables. May also be specified as -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"
...
    
por 08.10.2015 / 18:14