Files

38 lines
858 B
Bash

#!/bin/bash
load_env_file() {
local env_file="$1"
if [ ! -f "$env_file" ]; then
return 0
fi
while IFS= read -r raw_line || [ -n "$raw_line" ]; do
local line key value
line="${raw_line%$'\r'}"
[[ -z "${line//[[:space:]]/}" ]] && continue
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ "$line" != *"="* ]] && continue
key="${line%%=*}"
value="${line#*=}"
key="${key#${key%%[![:space:]]*}}"
key="${key%${key##*[![:space:]]}}"
if [[ ! "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
continue
fi
value="${value#${value%%[![:space:]]*}}"
value="${value%${value##*[![:space:]]}}"
if [[ "$value" =~ ^\".*\"$ ]]; then
value="${value:1:${#value}-2}"
elif [[ "$value" =~ ^\'.*\'$ ]]; then
value="${value:1:${#value}-2}"
fi
export "$key=$value"
done < "$env_file"
}