33 lines
756 B
Bash
Executable File
33 lines
756 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
env_file="${1:-.env}"
|
|
defaults_file="${2:-.env.example}"
|
|
|
|
if [ ! -f "$env_file" ] || [ ! -f "$defaults_file" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
added=0
|
|
while IFS= read -r line || [ -n "$line" ]; do
|
|
trimmed="${line#"${line%%[![:space:]]*}"}"
|
|
if [ -z "$trimmed" ] || [[ "$trimmed" == \#* ]] || [[ "$trimmed" != *=* ]]; then
|
|
continue
|
|
fi
|
|
key="${trimmed%%=*}"
|
|
if ! grep -qE "^${key}=" "$env_file"; then
|
|
if [ "$added" -eq 0 ]; then
|
|
{
|
|
echo
|
|
echo "# Added from .env.example on $(date +%F)"
|
|
} >> "$env_file"
|
|
fi
|
|
echo "$trimmed" >> "$env_file"
|
|
added=$((added + 1))
|
|
fi
|
|
done < "$defaults_file"
|
|
|
|
if [ "$added" -gt 0 ]; then
|
|
echo "merged $added missing env defaults into $env_file"
|
|
fi
|