Привет, у меня проблема, что сценарии, запускаемые во время загрузки из 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
переменная.