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.