SpectraRust/scripts/specf2r.sh
2026-06-06 14:24:50 +08:00

66 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# --- 配置变量 ---
WORK_DIR="/home/fmq/program/SpectraRust"
CMD_PATH="/home/fmq/.claude/local/claude"
CMD_ARGS="--permission-mode bypassPermissions --print '/codegraph-guide 继续执行重构任务。禁止询问,禁止总结报告,禁止跳过复杂模块。'"
# 日志文件路径:修改为工作目录内部
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