#!/bin/bash # ============================================= # 智教助手 - 单终端启动(前后端日志合并显示) # ============================================= set -e ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" echo "=========================================" echo " 智教助手 启动中..." echo "=========================================" # Kill existing processes on ports for port in 8000 5173; do for pid in $(netstat -ano 2>/dev/null | grep ":$port .*LISTEN" | awk '{print $5}' | sort -u); do [ "$pid" != "0" ] && [ -n "$pid" ] && taskkill //PID "$pid" //F 2>/dev/null || true done done sleep 1 cleanup() { echo "" echo "[STOP] 停止所有服务..." # Kill backend and frontend python/node processes we spawned kill $(jobs -p) 2>/dev/null || true wait 2>/dev/null echo "[STOP] 已停止" exit 0 } trap cleanup INT TERM # Backend - log with prefix ( cd "$ROOT_DIR/backend" python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload 2>&1 | while IFS= read -r line; do printf "\033[36m%-8s\033[0m %s\n" "后端" "$line" done ) & BACK_PID=$! # Frontend - log with prefix ( cd "$ROOT_DIR/frontend" npx vite --host 0.0.0.0 --port 5173 2>&1 | while IFS= read -r line; do printf "\033[32m%-8s\033[0m %s\n" "前端" "$line" done ) & FRONT_PID=$! sleep 4 echo "" echo "=========================================" echo " ✓ 服务已启动" echo " 前端: http://localhost:5173" echo " 后端: http://localhost:8000" echo " API: http://localhost:8000/docs" echo "=========================================" echo " Ctrl+C 停止所有服务" echo "" wait