Скриптам Slackware, запускаемым во время загрузки, нужно установить env vars из /etc/profile.d/*

Эй, у меня проблема в том, что сценарии, запущенные во время загрузки из rc.local, не имеют переменных среды (определенных в /etc/profile.d/*), установленных во время их запуска. Что я должен делать?


"su - lisak -c /opt/atlassian-jira-enterprise-4.1.1-standalone/bin/startup.sh"

"su - lisak -c /opt/aaa2/at-22/bin/startup.sh"


3 ответа

Решение

Сценарии на /etc/profile.d/* выполняются в своих собственных оболочках, а не в источниках, поэтому установленные ими переменные окружения в любом случае недоступны. Какие переменные вам нужны? Вы можете использовать /etc/environment ? Можете ли вы записать переменные в файл в var=value формат из соответствующих сценариев и источник этого файла в вашем rc.local скрипты?

Это из справочной страницы Bash. Вы можете найти это полезным.

Когда bash запускается неинтерактивно, например, для запуска сценария оболочки он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения., Bash ведет себя так, как будто была выполнена следующая команда: if [ -n "$BASH_ENV" ]; затем. "$BASH_ENV"; но значение переменной PATH не используется для поиска имени файла.

Оболочка Борна также использует ENV переменная.

Я думаю, что лучшее решение - это установить /etc/profile.d/*.sh или запустить / etc / profile из rc.local, потому что я не хочу дублировать конфигурацию для сценариев времени загрузки и сценариев, запускаемых из оболочки входа...

ПРИМЕЧАНИЕ: я не знаю, каковы могут быть последствия запуска / etc / profile из rc.local... поэтому лучшим способом было бы найти их на rc.local из /etc/profile.d/*.sh


AKA: для файла в /etc/profile.d/*; сделать исходный файл $; сделанный


АЛЬТЕРНАТИВА: echo ". / Etc/profile" >> $HOME/.bashrc - для одного пользователя

Цитата из справочной страницы su (Slackware 13.1):

       -, -l, --login
       Provide an environment similar to what the user would expect had
       the user logged in directly.

       When - is used, it must be specified as the last su option. The
       other forms (-l and --login) do not have this restriction.

В вашем примере вы не указываете - как последний вариант su. Попробуйте сделать это или использовать альтернативный аргумент.

Другие вопросы по тегам