экспортировать все переменные из среды EnvironmentFiles

Я хотел бы экспортировать все переменные, используемые определенной службой systemd, и указывается в его файле с помощью EnvironmentFile .

Например, foo.service :

 [Service] ... EnvronmentFile=/foo.env EnvronmentFile=/bar.env 

foo.env :

 a=1 #b=2 c=3 

Поэтому я думал добавить к моему bashrc что-то вроде

 set -a grep EnvironmentFile /etc/systemd/system/foo.service | grep -v '^ *#' | cut -d'=' -f2 | xargs -I {} bash -c 'source {};' set +a 

как указано в этом ответе .

Есть ли более элегантное решение?

  • Не удается загрузить систему с версией systemd выше 208
  • Служебные стартовые сообщения службы повторного запуска повторяются второй раз
  • systemd эквивалент «восходящего предела выскочки»
  • Ошибка Debconf в системе с systemd
  • Запуск Apache при завершении обслуживания с помощью SIGWINCH
  • Сообщение Systemd init появляется при загрузке OpenRC
  • Заявка на обслуживание в Centos 7
  • С помощью systemd-networkd выполните действие при изменении конфигурации сети
  • One Solution collect form web for “экспортировать все переменные из среды EnvironmentFiles”

    Это не сработает, потому что вы выполняете новую оболочку bash для создания «источника»,

    Пытаться:

     load_env() { local files=( $(egrep '^[ ]*EnvironmentFile' "$1" ) ) local f set -a for f in "${files[@]}" do . "${f##*=}" # this expression delete the EnvironmentFile= part done set +a } load_env /etc/systemd/system/foo.service 
    Linux и Unix - лучшая ОС в мире.