#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" RUNTIME_DIR="$SCRIPT_DIR/.runtime" ENV_FILE="${ELDER_ENV_FILE:-$REPO_DIR/.env}" if [[ -f "$ENV_FILE" ]]; then # shellcheck disable=SC1090 set -a; source "$ENV_FILE"; set +a fi : "${ELDER_DB_HOST:=127.0.0.1}" : "${ELDER_DB_PORT:=3306}" : "${ELDER_DB_NAME:=elder_yudao_local}" : "${ELDER_DB_USER:=root}" : "${ELDER_DB_PASSWORD:=}" : "${ELDER_REDIS_HOST:=127.0.0.1}" : "${ELDER_REDIS_PORT:=6379}" : "${ELDER_REDIS_DATABASE:=15}" : "${ELDER_REDIS_PASSWORD:=}" : "${ELDER_SERVER_PORT:=48080}" : "${ELDER_UI_PORT:=5173}" if [[ ! "$ELDER_DB_NAME" =~ ^elder_yudao_[a-z0-9_]+$ ]]; then echo "ELDER_DB_NAME 必须是 elder_yudao_* 独立数据库。" >&2 exit 1 fi find_command() { local configured="$1"; shift if [[ -n "$configured" && -x "$configured" ]]; then printf '%s\n' "$configured" return 0 fi local candidate for candidate in "$@"; do if command -v "$candidate" >/dev/null 2>&1; then command -v "$candidate" return 0 fi done return 1 } resolve_java() { if [[ -n "${JAVA_BIN:-}" && -x "$JAVA_BIN" ]]; then printf '%s\n' "$JAVA_BIN"; return; fi find_command '' java || { echo '未找到 Java。请安装 Java 8/11/17,并设置 JAVA_BIN。' >&2 exit 1 } } resolve_maven() { if [[ -n "${MAVEN_BIN:-}" && -x "$MAVEN_BIN" ]]; then printf '%s\n' "$MAVEN_BIN"; return; fi find_command '' mvn || { local bundled='/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn' if [[ -x "$bundled" ]]; then printf '%s\n' "$bundled"; return; fi echo '未找到 Maven。请安装 Maven,或设置 MAVEN_BIN。' >&2 exit 1 } } resolve_node() { if [[ -n "${NODE_BIN:-}" && -x "$NODE_BIN" ]]; then printf '%s\n' "$NODE_BIN"; return; fi find_command '' node || { echo '未找到 Node.js 18+。请安装 Node.js,或设置 NODE_BIN。' >&2 exit 1 } } mysql_query() { local database="$1"; shift local mysql_bin mysql_bin="${MYSQL_BIN:-$(command -v mysql || true)}" if [[ -z "$mysql_bin" ]]; then echo '未找到 mysql 客户端。请安装 MySQL 8,并设置 MYSQL_BIN。' >&2 exit 1 fi MYSQL_PWD="$ELDER_DB_PASSWORD" "$mysql_bin" \ --protocol=TCP --host="$ELDER_DB_HOST" --port="$ELDER_DB_PORT" \ --user="$ELDER_DB_USER" --default-character-set=utf8mb4 \ ${database:+--database="$database"} --batch --skip-column-names --execute="$1" } ensure_runtime_dir() { mkdir -p "$RUNTIME_DIR"; }