Listando variáveis de ambiente de um determinado SHELL

1

É possível listar as variáveis de ambiente definidas por uma sessão de shell específica.

[root@me]who

dave     pts/1        Jan 23 03:09 (::ffff:132.39.129.11)
dave     pts/3        Jan 23 04:04 (::ffff:132.39.130.42)
patrick  pts/4        Jan 23 03:31 (::ffff:132.39.129.11)
patrick  pts/2        Jan 23 02:59 (::ffff:10.2.13.166)
jonh     pts/5        Jan 23 03:41 (132.39.130.8)
john     pts/6        Jan 23 03:53 (::ffff:132.39.130.42)
root     pts/0        Jan 23 04:04 (132.39.130.42:0)

Eu gostaria de saber as variáveis de ambiente que foram definidas na sessão em pts / 4, digamos.

Obrigado pela ajuda Felicidades

    
por Dave Bourbeau 23.01.2017 / 16:36

3 respostas

1

Do id do processo, você pode receber o ambiente. Você pode usar ps -aux para obter o ID do processo de um dado tty. Quando você tem o id do processo, você pode usar o comando sudo cat /proc/$PROCSSID/environ onde você substitui $PROCESSID com o id do processo - para despejar seu ambiente.

    
por jhilmer 23.01.2017 / 16:46
1

O ambiente está configurado para um processo, não um TTY. 1 tty pode ter vários shells ativos ao mesmo tempo, então podem ter diferentes conjuntos de variáveis.

Então faça um

ps -ef |grep pts/4

e observe o processid do shell que você deseja investigar. Então dê uma olhada ...

more /proc/{processid}/environ

Veja man proc 7 para saber mais sobre isso.

    
por Rinzwind 23.01.2017 / 16:46
1

Poderia haver qualquer processo (capaz) anexado ao terminal, não necessariamente um shell. Mas uma concha é típica e, é claro, pode haver múltiplos projéteis envolvidos - imagine uma concha gerando outra, e assim por diante.

O kernel Linux expõe parte de sua estrutura de dados interna por meio do pseudo FS, procfs ; montado em /proc (padrão). O ambiente de um processo é normalmente exposto por meio do arquivo /proc/PID/environ .

Assim, você pode obter o (s) processo (s) anexado (s) a um determinado terminal e ler o arquivo /proc/PID/environ para obter o ambiente do processo. Também no arquivo, os valores das variáveis são mostrados como KEY=VALUE pair, e as variáveis separadas umas das outras pelo ASCII NUL, então você precisa lidar com isso também para facilitar a leitura.

Obtendo o PID de todos os processos anexados ao terminal desejado e usando awk para ler o arquivo de ambiente relevante, e obtenha as variáveis na forma separada por nova linha:

ps -eo pid,tty | awk -v tty='pts/4' ' ~ tty {"cat /proc/""/environ" \
             | getline i; gsub("\0", "\n", i); printf "PID=%s\n%s\n\n",, i}'

Use o nome do terminal desejado na variável tty passada para awk , aqui eu usei pts/4 como você mencionou na pergunta. A saída também conterá uma linha PID=<pid> no início, apenas para maior clareza e legibilidade.

    
por heemayl 23.01.2017 / 17:27