#!/bin/bash # ============================================================ # 开发启动脚本 (Linux / Git Bash 通用) # 用法: # bash dev.sh backend 启动后端 (端口 9999) # bash dev.sh frontend 启动前端 (端口 3000) # bash dev.sh kill 关闭所有项目进程 # ============================================================ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" kill_port() { local port=$1 local pids if [ "$IS_WIN" = true ]; then # Windows: netstat -ano 第5列是PID pids=$(netstat -ano 2>/dev/null | grep ":$port" | grep "LISTENING" | awk '{print $5}' | sort -u) else # Linux: lsof 或 ss pids=$(lsof -ti :$port 2>/dev/null || ss -tlnp 2>/dev/null | grep ":$port" | grep -oP 'pid=\K\d+' | sort -u) fi if [ -n "$pids" ]; then for pid in $pids; do if [ "$IS_WIN" = true ]; then taskkill //F //PID "$pid" 2>/dev/null else kill -9 "$pid" 2>/dev/null fi echo " [KILL] PID $pid (port $port)" done else echo " [OK] 端口 $port 无进程" fi } # 检测系统 case "$OSTYPE" in msys|cygwin|win32) IS_WIN=true ;; *) IS_WIN=false ;; esac case "${1}" in backend) kill_port 9999 sleep 1 cd "$SCRIPT_DIR/our-itam" echo "=== our-itam 后端启动中... 端口:9999 ===" mvn spring-boot:run -Dspring-boot.run.profiles=dev ;; frontend) kill_port 3000 sleep 1 cd "$SCRIPT_DIR/antdv-next-admin" echo "=== antdv-next-admin 前端启动中... 端口:3000 ===" npm run dev ;; kill) kill_port 9999 kill_port 3000 echo "=== 已关闭全部 ===" ;; check) echo "SCRIPT_DIR: $SCRIPT_DIR" echo "IS_WIN: $IS_WIN" echo "mvn: $(which mvn 2>/dev/null || echo 'NOT FOUND')" echo "npm: $(which npm 2>/dev/null || echo 'NOT FOUND')" echo "node: $(which node 2>/dev/null || echo 'NOT FOUND')" echo "---" echo "pom.xml: $(ls "$SCRIPT_DIR/our-itam/pom.xml" 2>/dev/null || echo 'NOT FOUND')" echo "package.json: $(ls "$SCRIPT_DIR/antdv-next-admin/package.json" 2>/dev/null || echo 'NOT FOUND')" ;; *) echo "用法: bash dev.sh [backend|frontend|kill|check]" echo "" echo " backend 启动后端 (端口 9999)" echo " frontend 启动前端 (端口 3000)" echo " kill 关闭所有项目进程" echo " check 检查环境" ;; esac