Список переменных среды конкретного SHELL

Действительно ли возможно перечислить переменные среды, установленные конкретной сессией оболочки.

[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)

Я хотел бы знать переменные среды, которые были установлены на сессии на pts/4 скажем.

Спасибо за справку, Аплодисменты

1
задан 23 January 2017 в 18:57

3 ответа

Из идентификатора процесса вы можете получить окружающую среду. Вы можете использовать ps -aux, чтобы получить идентификаторы процесса данного tty. Когда у вас есть идентификатор процесса, вы можете использовать команду sudo cat /proc/$PROCSSID/environ, где вы замените $PROCESSID идентификатором процесса - чтобы сбросить его среду.

2
ответ дан 3 December 2019 в 06:31

Среда настроена на процесс, а не на TTY. 1 tty может иметь несколько активных оболочек одновременно, поэтому может иметь разные наборы переменных.

Сделайте также

ps -ef |grep pts/4

и обратите внимание на процесс оболочки, который вы хотите исследовать. Тогда взгляните на ...

more /proc/{processid}/environ

Подробнее об этом см. man proc 7.

2
ответ дан 3 December 2019 в 06:31

Мог быть любой (способный) процесс, подключенный к терминалу, не обязательно оболочке. Но оболочка типична, и конечно, могло быть несколько включенных оболочек - предполагают, что оболочка порождает другой и так далее.

ядро Linux выставляет часть, он - внутренняя структура данных через псевдо FS, procfs; смонтированный на /proc (значение по умолчанию). Среда процесса обычно выставляется через /proc/PID/environ файл.

Так, можно получить процесс (процессы), который присоединен к определенному терминалу, и затем читайте /proc/PID/environ файл для получения среды процесса. Также в файле, значения переменных показываются KEY=VALUE пара и переменные, разделенные друг от друга ASCII NUL, таким образом, необходимо обработать это также для удобочитаемости.

Получение PID всех процессов, подключенных к желаемому терминалу и использованию awk, чтобы считать соответствующий файл среды и получить переменные в новой строке, разделило форму:

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

Использование требовало терминального имени на tty, переменная передала awk, здесь я использовал pts/4 как Вы упомянутый в вопросе. Вывод будет также содержать PID=<pid> строка в запуске, только ради ясности и удобочитаемости.

2
ответ дан 3 December 2019 в 06:31

Другие вопросы по тегам:

Похожие вопросы: