Files
musicdl-catalog-sync-suite/catalog-sync/scripts/catalogsync/templates/load_env.sh
T

56 lines
1.4 KiB
Bash

#!/usr/bin/env bash
trim_env_whitespace() {
local value="$1"
value="${value#"${value%%[![:space:]]*}"}"
value="${value%"${value##*[![:space:]]}"}"
printf '%s' "${value}"
}
load_env_file() {
local env_file="$1"
local raw_line=""
local normalized=""
local key=""
local value=""
local trimmed_value=""
local quote_char=""
[[ -f "${env_file}" ]] || return 1
while IFS= read -r raw_line || [[ -n "${raw_line}" ]]; do
raw_line="${raw_line%$'\r'}"
normalized="$(trim_env_whitespace "${raw_line}")"
if [[ -z "${normalized}" || "${normalized:0:1}" == "#" ]]; then
continue
fi
if [[ "${normalized}" == export\ * ]]; then
normalized="${normalized#export }"
fi
if [[ "${normalized}" != *=* ]]; then
continue
fi
key="$(trim_env_whitespace "${normalized%%=*}")"
if [[ -z "${key}" ]]; then
continue
fi
value="${normalized#*=}"
trimmed_value="$(trim_env_whitespace "${value}")"
if [[ ${#trimmed_value} -ge 2 ]]; then
quote_char="${trimmed_value:0:1}"
if [[ ( "${quote_char}" == "'" || "${quote_char}" == '"' ) && "${trimmed_value: -1}" == "${quote_char}" ]]; then
value="${trimmed_value:1:${#trimmed_value}-2}"
else
value="${trimmed_value}"
fi
else
value="${trimmed_value}"
fi
printf -v "${key}" '%s' "${value}"
export "${key}"
done < "${env_file}"
}