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.