feat(deploy): 拉取后自动合并 server/.env.example 缺失键,服务器只跑 pull-and-restart
Made-with: Cursor
This commit is contained in:
30
scripts/merge-server-env-from-example.sh
Normal file
30
scripts/merge-server-env-from-example.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# 将 server/.env.example 中「server/.env 尚未出现的 KEY=」追加到 .env,不覆盖已有配置。
|
||||
# 供 pull-and-restart / restart 调用,实现服务器零手动改 .env。
|
||||
set +e
|
||||
ROOT="${1:-}"
|
||||
if [ -z "$ROOT" ]; then
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
fi
|
||||
ENVF="$ROOT/server/.env"
|
||||
EX="$ROOT/server/.env.example"
|
||||
[ -f "$EX" ] || exit 0
|
||||
[ -f "$ENVF" ] || exit 0
|
||||
|
||||
while IFS= read -r raw || [ -n "$raw" ]; do
|
||||
line="${raw#"${raw%%[![:space:]]*}"}"
|
||||
line="${line%"${line##*[![:space:]]}"}"
|
||||
case "$line" in
|
||||
\#*|'') continue ;;
|
||||
esac
|
||||
case "$line" in
|
||||
[A-Za-z_][A-Za-z0-9_]*=*)
|
||||
key="${line%%=*}"
|
||||
if ! grep -qE "^[[:space:]]*${key}=" "$ENVF" 2>/dev/null; then
|
||||
printf '\n# auto from .env.example (%s)\n%s\n' "$(date +%Y-%m-%d)" "$line" >> "$ENVF"
|
||||
echo "merge-server-env: 已追加 $key -> server/.env" >&2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < "$EX"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user