#!/bin/bash # --- 配置变量 --- WORK_DIR="/home/fmq/program/SpectraRust" CMD_PATH="/home/fmq/.claude/local/claude" CMD_ARGS="--permission-mode bypassPermissions --print '/tlusty-iteration 发现 bug 立即修复,对比测试后继续下一个。禁止询问,禁止总结报告,禁止跳过复杂模块。'" # 日志文件路径:修改为工作目录内部 LOG_FILE="${WORK_DIR}/logs/claude_$(date +%Y%m%d_%H%M%S).log" # --- 1. 环境检查 --- # 检查工作目录是否存在 if [ ! -d "$WORK_DIR" ]; then echo "❌ 错误: 工作目录不存在: $WORK_DIR" exit 1 fi # 检查命令文件是否存在且可执行 if [ ! -x "$CMD_PATH" ]; then echo "❌ 错误: 命令不存在或不可执行: $CMD_PATH" exit 1 fi # --- 新增:检查是否已有 claude 进程在运行 --- echo "正在检查是否有 claude 进程在运行..." # 使用 ps aux 列出所有进程,然后 grep 查找 'claude',再用 grep -v grep 排除掉 grep 命令本身 if ps aux | grep '[c]laude' > /dev/null; then echo "⚠️ 检测到 claude 进程已在运行,退出脚本。" # 可选:显示正在运行的进程信息 ps aux | grep '[c]laude' exit 1 fi # --- 2. 启动进程 --- # 切换到工作目录 cd "$WORK_DIR" || exit 1 # 执行命令 # nohup 保证退出终端后进程不挂 # < /dev/null 防止进程读取终端输入导致挂起 # > "$LOG_FILE" 2>&1 将标准输出和错误输出都重定向到日志文件 nohup "$CMD_PATH" $CMD_ARGS < /dev/null > "$LOG_FILE" 2>&1 & CURRENT_PID=$! # --- 3. 验证启动结果 --- # 短暂休眠,给进程一点初始化时间,以便捕获即时崩溃(如缺少动态库) sleep 0.5 # 检查进程是否仍然存活 if kill -0 "$CURRENT_PID" 2>/dev/null; then echo "启动成功!" echo "PID: $CURRENT_PID" echo "日志路径: $LOG_FILE" exit 0 else echo "❌ 启动失败! 进程已意外退出。" echo "--- 错误日志预览 ---" # 如果日志文件存在,打印其内容 if [ -f "$LOG_FILE" ]; then cat "$LOG_FILE" else echo "(无日志文件生成)" fi exit 1 fi