#!/bin/bash # # Shared .env loader. Uses standard .env format: # KEY=value # KEY="value with spaces" # KEY='value' # # Values with special chars (#, $, spaces) should be quoted in .env. # Usage: source scripts/lib/load_env.sh && load_env_file /path/to/.env # load_env_file() { local env_file="${1:-}" [[ -z "${env_file}" || ! -f "${env_file}" ]] && return 0 while IFS= read -r line || [[ -n "${line}" ]]; do line="${line%$'\r'}" [[ -z "${line//[[:space:]]/}" ]] && continue [[ "${line}" =~ ^[[:space:]]*# ]] && continue [[ "${line}" != *=* ]] && continue local key="${line%%=*}" local value="${line#*=}" key="${key#"${key%%[![:space:]]*}"}" key="${key%"${key##*[![:space:]]}"}" value="${value#"${value%%[![:space:]]*}"}" value="${value%"${value##*[![:space:]]}"}" # Strip surrounding quotes (standard .env behavior) if [[ ${#value} -ge 2 ]]; then local first="${value:0:1}" local last="${value: -1}" if [[ ("${first}" == '"' && "${last}" == '"') || ("${first}" == "'" && "${last}" == "'") ]]; then value="${value:1:${#value}-2}" fi fi # Safe export: %q produces shell-quoted string for values with spaces/special chars eval "$(printf 'export %s=%q\n' "$key" "$value")" done < "${env_file}" }