Bash
從 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
如本答案中所述。
有沒有更優雅的解決方案?
這根本行不通,因為您正在執行一個新的 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