scripts/lib/butler-source-env.sh
Rama main · réplica de lectura del repositorio original.
# Safe .env loader for bash scripts with `set -u` (source, do not execute).
# Usage: ROOT=... source scripts/lib/butler-source-env.sh
# butler_source_env "$ROOT/.env"
_lib_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
butler_fix_path_after_env() {
# shellcheck source=scripts/lib/butler-systemd-install.sh
source "$_lib_dir/butler-systemd-install.sh"
local safe merged env_path
safe="$(butler_systemd_path)"
env_path="${PATH:-}"
# systemd EnvironmentFile does not expand $PATH; strip literal artifact
env_path="${env_path//:\$PATH/}"
env_path="${env_path//\$PATH:/}"
env_path="${env_path//\$PATH/}"
merged="$safe"
if [[ -n "$env_path" ]]; then
merged="$merged:$env_path"
fi
local nvm_bin=""
local IFS=':'
for seg in $merged; do
if [[ "$seg" == *"/.nvm/versions/node/"* ]]; then
nvm_bin="$seg"
break
fi
done
if [[ -n "$nvm_bin" ]]; then
local rest=""
for seg in $merged; do
[[ "$seg" == "$nvm_bin" ]] && continue
rest="${rest:+$rest:}$seg"
done
merged="${nvm_bin}:${rest}"
fi
export PATH="$merged"
}
butler_source_env() {
local env_file="${1:-}"
if [[ -z "$env_file" || ! -f "$env_file" ]]; then
return 1
fi
local had_u=0
case $- in *u*) had_u=1 ;; esac
set +u
set -a
# shellcheck disable=SC1090
source "$env_file"
set +a
if [[ "$had_u" -eq 1 ]]; then
set -u
fi
butler_fix_path_after_env
return 0
}