Действительно ли возможно перечислить переменные среды, установленные конкретной сессией оболочки.
[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 скажем.
Спасибо за справку, Аплодисменты
Из идентификатора процесса вы можете получить окружающую среду. Вы можете использовать ps -aux
, чтобы получить идентификаторы процесса данного tty. Когда у вас есть идентификатор процесса, вы можете использовать команду sudo cat /proc/$PROCSSID/environ
, где вы замените $PROCESSID
идентификатором процесса - чтобы сбросить его среду.
Среда настроена на процесс, а не на TTY. 1 tty может иметь несколько активных оболочек одновременно, поэтому может иметь разные наборы переменных.
Сделайте также
ps -ef |grep pts/4
и обратите внимание на процесс оболочки, который вы хотите исследовать. Тогда взгляните на ...
more /proc/{processid}/environ
Подробнее об этом см. man proc 7
.
Мог быть любой (способный) процесс, подключенный к терминалу, не обязательно оболочке. Но оболочка типична, и конечно, могло быть несколько включенных оболочек - предполагают, что оболочка порождает другой и так далее.
ядро 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>
строка в запуске, только ради ясности и удобочитаемости.