#!/usr/bin/env bash # Environment loader and profile support # Provides: load_env [--profile ] [--file ] and helpers set -euo pipefail DEFAULT_ENV_FILE="${DEFAULT_ENV_FILE:-.env}" load_env() { local profile=""; local file="$DEFAULT_ENV_FILE"; local opt while [[ $# -gt 0 ]]; do opt="$1" case "$opt" in --profile) profile="$2"; shift 2;; --file) file="$2"; shift 2;; *) break;; esac done if [ -f "$file" ]; then local had_nounset=0 if [[ $- == *u* ]]; then had_nounset=1 set +u fi # shellcheck disable=SC2046 set -a; . "$file"; set +a (( had_nounset )) && set -u fi if [ -n "$profile" ]; then local pf="${file}.${profile}" if [ -f "$pf" ]; then local had_nounset_profile=0 if [[ $- == *u* ]]; then had_nounset_profile=1 set +u fi # shellcheck disable=SC2046 set -a; . "$pf"; set +a (( had_nounset_profile )) && set -u fi fi } require_env() { local name="$1" if [ -z "${!name:-}" ]; then echo "Missing required env: $name" >&2 return 1 fi } current_profile() { echo "${ENV_PROFILE:-}" }