LINUX.ORG.RU

Совершенно дурацкий вопрос: переменные окружения...


0

1

Совершенно дурацкий вопрос: переменные окружения...

Есть embedded система с 2.6.37 и BusyBox1.16 на борту. Летом был написан примитивный скрипт, который запускается из etc/init.d:

#!/bin/sh


export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/local/bin:\

export TSLIB_CONSOLEDEVICE=none
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CALIBFILE=/home/user/ts.calibr
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_PLUGINDIR=/usr/lib/ts
export QWS_MOUSE_PROTO=«tslib:/dev/input/event1»
echo 100 > /sys/class/backlight/backlight/brightness


Когда «вручную» запускаю одну из программ, которой нужны эти переменные, то программа отваливается с сообщением, что переменная не определена. Причем, что интересно, когда запускаю эту же программу из этого скрипта, то она запускается и не жалуется.

Когда из шела набираю «echo $TSLIB_FBDEVICE», то ничего не печатается - я так понимаю, что переменная пустая. Блин, туплю я! Подскажите, как определить в sh глобальную переменную, которую будут видеть все программы

Спасибо


Запускать надо так:
VAR = «bla bla» COMMAND

babusha
()

Перед запуском этой программы придётся делать source /путь/к/файлу/с/переменными.

AITap ★★★★★
()
Ответ на: комментарий от gentoo_root

Ок, спасибо, я понял, в чем была моя проблема - я запускал шел прямо из inittab:
ttyS0::respawn:/bin/sh

похоже для такого варианта перменные окружения не работают, когда вернул взад:
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL

который требует залогиниться, тогда все работает нормально

velikS
() автор топика

Экспортируемые переменные гарантированно получают только прямые потомки этого скрипта. Каждый процесс определяет какие переменные среды получает его потомок и не обязательно передаёт потомку все имеющиеся у него переменные.

Если вам нужен запуск бинарника с заданными переменными среды, лучше всего, ИМХО, написать к нему скрипт-обёртку:

#!/bin/sh

export TSLIB_FBDEVICE=/dev/input/event1; exec /bin/ПРОГРАММА

И в ручную и из скриптов запускать эту обёртку.

mky ★★★★★
()
Ответ на: комментарий от Nao

И запихни вызов этого скрипта или его содержимое в /etc/profile

Nao ★★★★★
()
Ответ на: комментарий от Nao

Такой вариант был в первом посте. Если ТС программу нужно вызывать только из скриптов, то хорошо, а если её вызывает какой-то ещё процесс, понимающий только имя программы, то лучше обернуть.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.