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