поведение переменного окружения

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модератор: SLEDopit

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

поведение переменного окружения

Сообщение BigBrother »

Всем привет. Имеем сервер fedora21. Добавил файл /etc/profile.d/my-custom.sh с содержимым

Код: Выделить всё

DB=/srv/db
PATH=$PATH:/srv/db

if [ ! -e ~/.test-file ]; then
   touch ~/.test-file
fi

Инструкции в этом файле, автоматически выполняются для всех юзеров, когда они логинятся в систему. touch тут для тестов, чтобы убедится что файл test-file создается в папке каждого юзера - в смысле что содержимое my-custom.sh выполняется. Программы, которые для своего запуска требуют переменную DB, отказываются работать, т.к. не видят этой переменной, пока перед запуском программы не сделаешь echo $DB. Делаю команду cmd_run $DB/next_dir получаю ошибку, программа говорит что не видит бд по пути /next_dir (правильно, там ее и нет, т.к. переменная $DB не подставилась). Потом делаю echo $DB (получаю путь /srv/db), после чего ещё раз запускаю cmd_run $DB/next_dir и теперь все ок, т.к. программа уже ищет бд в /srv/db/next_dir.
Пробовал в файл вместо "DB=/srv/db" писать "export DB=/srv/db" - не помогает. В чем может быть проблема? Почему консольная программа, видит переменную только после echo, хотя эта переменная уже есть в env?
Спасибо сказали:

Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: поведение переменного окружения

Сообщение yars »

export DB в конец скрипта добавьте.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: поведение переменного окружения

Сообщение BigBrother »

Это не помогает.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17900
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: поведение переменного окружения

Сообщение Bizdelnick »

BigBrother писал(а):
30.05.2015 23:39
Почему консольная программа, видит переменную

В данном случае она никакую переменную не видит и видеть не должна, её должен раскрыть шелл и передать команде уже полный путь. echo на это никак не влияет.
Что за шелл?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: поведение переменного окружения

Сообщение BigBrother »

Bizdelnick писал(а):
31.05.2015 13:30
В данном случае она никакую переменную не видит и видеть не должна, её должен раскрыть шелл и передать команде уже полный путь. echo на это никак не влияет.

Проблема была в том, что команда cmd_run $DB/next_dir передается процессу в системе, который работает от рута и который запускает эту команду каждый раз от разных юзеров, и вот по этому, переменные окружения не применялись. Решение - перед выполнение команды, добавить команду source /etc/profile.d/my-custom.sh и теперь все ок.

Bizdelnick писал(а):
31.05.2015 13:30
Что за шелл?

bash
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17900
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: поведение переменного окружения

Сообщение Bizdelnick »

BigBrother писал(а):
04.06.2015 17:07
команда cmd_run $DB/next_dir передается процессу в системе, который работает от рута и который запускает эту команду каждый раз от разных юзеров, и вот по этому, переменные окружения не применялись

Переменные окружения могут сохраняться или нет в зависимости от того, каким образом меняете пользователя (опций su/sudo).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: поведение переменного окружения

Сообщение BigBrother »

Bizdelnick писал(а):
04.06.2015 17:13
Переменные окружения могут сохраняться или нет в зависимости от того, каким образом меняете пользователя (опций su/sudo).

Не совсем понятно как они могут сохраниться, если профиль юзера про них ничего не знает? Или переменные окружения можно передать/скопировать от одного юзера другому?
Не известно как переключатся пользователи, через sudo/su или другими способами, т.к это сторонняя разработка, а копаться в исходниках нет желания.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17900
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: поведение переменного окружения

Сообщение Bizdelnick »

BigBrother писал(а):
04.06.2015 19:00
Не совсем понятно как они могут сохраниться, если профиль юзера про них ничего не знает?

Так и профиль пользователя вовсе не обязательно загружать (он по умолчанию и не загружается ни su, ни sudo). Если речь о su, см. опции -m и -p, для sudo — -E.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: поведение переменного окружения

Сообщение BigBrother »

Вопрос в тему ENV-a.
Почему либы для перла надо указывать с помощью export, а свои кастомные переменные, такие как $DB (см. выше) можно указать без export?
export PERL5LIB=/srv/custom/lib/perl5/site_perl - работает
PERL5LIB=/srv/custom/lib/perl5/site_perl - не работает: Can't locate NAME.pm in @INC (you may need to install the NAME module) ...
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17900
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: поведение переменного окружения

Сообщение Bizdelnick »

Если переменная не экспортирована, в окружении её нет. О ней знает только оболочка, которая может её раскрыть при необходимости. После того, как переменную экспортировали, она становится доступной запускаемым дочерним процессам.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: