Назад | Перейти на главную страницу

/ proc / pid / окружающие отсутствующие переменные

Google не любит это сегодня, поэтому я обращаюсь к экспертам ...

В настоящее время я собираю сценарий, который использует функцию / proc / pid / Environment в Linux (RHEL 4) для проверки конкретной переменной среды. Проблема в том, что некоторые переменные среды по какой-то причине там не отображаются.

Пример:

create some test vars:
$ export T_1=testval TEST_1=testval T=testval TESTING_LONGEST=testval

open a subshell:
$bash

$ cat /proc/self/environ|tr "\0" "\n"|grep testval
TESTVARIABLE_LONGEST=testval
T=testval

хм ... куда делись Т_1 и ТЕСТ_1 ?? какие правила управляют этой странной вселенной?

Заранее спасибо, Джош

ОБНОВИТЬ:

Мне удалось воспроизвести эту проблему в различных версиях RHEL и у разных пользователей, но, похоже, она уникальна для Bash (я использую 3.0). ksh не показывает такого поведения.

Посмотри на Переменные среды запущенного процесса в Unix? ; он отмечает, что / proc / * / окружающая среда ограничена 4096 байтами в некоторых ядрах и что она не отображает переменные окружения, которые были изменены в этой оболочке.

Некоторые файлы в / proc плохо реагируют на чтение небольшими блоками. Попробуйте вместо этого что-нибудь вроде этого:

dd if=/proc/self/environ bs=1024k | tr "\0" "\n" | grep testval

Попробуйте использовать strings вместо того tr. Намного лучше найти читаемые строки, чем просто заменить NUL на новые строки.

strings /proc/$$/environ