Не импортированная переменная среды с фиксированной версией bash
У меня есть простой скрипт bash, который изменяет переменную среды, которая будет использоваться последующим двоичным файлом. Ниже мой основной сценарий:
#!/bin/bash
export DBROOT="NEW_DIRECTORY"
export TERM=xterm
su -c " <test_process> " - omni
Переменная DBROOT используется "test_process" в качестве переменной среды. Кроме того, DBROOT определяется с другим значением "OLD_DIRECTORY" в качестве глобальной переменной среды. Цель сценария - заставить "test_process" использовать значение NEW_DIRECTORY (экспортированное значение).
С не исправленной версией bash, тест работал. Однако после исправления ошибки "Shellshock" в bash test_process не считывает экспортированное значение DBROOT и глобальные переменные среды. Это как если бы "test_process" игнорировал экспортированные и глобальные переменные.
У меня нет исходного кода "test_process". Версия bash - версия 2.05b.0(1)-релиз (версия rpm - bash-2.05b-41.7.i386.rpm), и я работаю на Red Hat Enterprise Linux AS выпуск 3
Обновление: после перекомпиляции последних источников bash 2.05b путем установки определения времени компиляции
#define NON_INTERACTIVE_LOGIN_SHELLS
скрипт снова заработал. Без этого определения Баш неверно истолковал -
символ после su
команда
1 ответ
Это довольно древнее программное обеспечение, которое вы используете.
Я предлагаю попробовать:
su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni
Это перемещает настройки среды в оболочку, управляемую su
вместо того, чтобы полагаться на su
передавать окружающую среду.