Чтобы заставить bash анализировать файл, когда он вызывается как неинтерактивная оболочка, вам нужно установить переменную среды BASH_ENV
чтобы она указывала на этот файл. От man bash
(раздел «ПРИЗНАНИЕ»):
Когда bash запускается неинтерактивно, например, для запуска сценария оболочки он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. , Bash ведет себя так, как будто была выполнена следующая команда:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
но значение переменной PATH не используется для поиска имени файла.
Так где же установить BASH_ENV
?
Либо: если вы хотите, чтобы переменная была доступна для всей системы, лучше всего ее поместить в /etc/environment
. Этот файл специально создан для общесистемных настроек переменных среды. Он анализируется не оболочкой, а модулем PAM pam_env
, поэтому вы не можете использовать синтаксис оболочки или расширение переменных внутри, а только простые присваивания следующего типа:
VARIABLE=value
или же
VARIABLE=/full/path/to/file
Изменения вступят в силу при следующем входе в систему / аутентификации, поэтому переключитесь на новую консоль tty или выйдите из системы и повторно войдите в свой сеанс.
В стандартной настольной системе это должно работать для всех типов аутентифицированных сеансов, использующих PAM, включая консольные логины, диспетчеры ssh и display, а также демоны, такие как atd и cron. Если все работает как положено, значит, все готово, и вам не нужно читать дальше.
Однако ошибки иногда проникают в файлы конфигурации PAM некоторых программ / дистрибутивов, поэтому, если /etc/environment
не анализируется программой определенного типа, убедитесь, что необходимый модуль PAM загружен в файл конфигурации PAM для этой программы. в /etc/pam.d
:
session required pam_env.so readenv=1
(Примечание: флаг readenv
который включает / выключает чтение файла конфигурации, на самом деле не должен быть необходим, поскольку по умолчанию он включен (1), но это также не мешает убедиться).
Или: если вы работаете в системе, которая не предоставляет pam_env
, то лучшей альтернативой, которая мне приходит в голову, будет написание простого сценария инициализации (или файла служебного блока в systemd), который анализирует пользовательский файл конфигурации (такой как /etc/default/environment
) при загрузке.