Назад | Перейти на главную страницу

Скриптам Slackware, запускаемым во время загрузки, необходимо установить переменные env из /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"


Я думаю, что лучшим решением является источник /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. Попробуйте сделать это или используйте другой аргумент.

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

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

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

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