Щоб зробити 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 та менеджери дисплеїв, а також демони, такі як atd та cron. Якщо все працює так, як очікувалося, тоді ви зробите, і читати далі немає потреби.
Однак помилки іноді проникають у файли конфігурації PAM деяких програм / дистрибутивів, тому, якщо /etc/environment
не аналізується певний тип програми, переконайтеся, що необхідний модуль PAM завантажений у файл конфігурації PAM для цієї програми у /etc/pam.d
:
session required pam_env.so readenv=1
(Примітка. readenv
Прапор, який вмикає чи вимикає читання файлу конфігурації, насправді не потрібен, оскільки він за замовчуванням встановлений увімкнено (1), але це також не завадить переконатися.)
Або:
Якщо ви працюєте в системі, яка не забезпечує pam_env
, то найкращою альтернативою, яка мені спадає на думку, було б написати простий скрипт init (або файл сервісного блоку в systemd), який аналізує спеціальний конфігураційний файл (наприклад /etc/default/environment
) під час завантаження. .