From 54103509458d32c05a80913f97c5ec6a37be2da9 Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Wed, 18 Jun 2025 23:07:24 +0300 Subject: [PATCH] feat: fix loading && add output --- use_dotenvx.sh | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) mode change 100644 => 100755 use_dotenvx.sh diff --git a/use_dotenvx.sh b/use_dotenvx.sh old mode 100644 new mode 100755 index 3f3c64d..a9276d2 --- a/use_dotenvx.sh +++ b/use_dotenvx.sh @@ -2,9 +2,38 @@ use_dotenvx() { local env_file=".env.${1:-default}" + local dotenvx_env=() + local used_file="" + if [ -f "$env_file" ]; then - eval "$(dotenvx --env "$env_file" export)" + dotenvx_env=(--env "$env_file") + used_file="$env_file" elif [ -f ".env" ]; then - eval "$(dotenvx export)" + used_file=".env" + else + echo "use_dotenvx: no .env file found" >&2 + return 0 fi + + local old_env new_env added_vars + old_env=$(mktemp) + new_env=$(mktemp) + + env | sort >"$old_env" + dotenvx run "${dotenvx_env[@]}" -- env | sort >"$new_env" + + added_vars=$(comm -13 "$old_env" "$new_env" | grep '=') + + if [ -n "$added_vars" ]; then + printf "use_dotenvx: loaded variables from %s: " "$used_file" >&2 + fi + + while IFS='=' read -r key _value; do + if [[ "$key" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ && "$key" != "_" && "$key" != "PKG_EXECPATH" ]]; then + printf "+%s " "$key" >&2 + fi + done <<<"$added_vars" + + echo "" >&2 + rm -f "$old_env" "$new_env" }