Bash

從 EnvironmentFiles 導出所有變數

  • February 12, 2017

我想導出某個 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

如本答案中所述。

有沒有更優雅的解決方案?

這根本行不通,因為您正在執行一個新的 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

引用自:https://unix.stackexchange.com/questions/344357