从环境文件中导出所有变量

从环境文件中导出所有变量

我想导出某个 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

如本条规定回答

有更优雅的解决方案吗?

答案1

这根本不起作用,因为您正在执行一个新的 bash shell 来执行“源”

尝试:

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

相关内容