#!/usr/bin/env bash set -euo pipefail AUTOGRADE_DIR="${1:-lab1_files/autograde}" STUDENTS_FILE="$AUTOGRADE_DIR/students.txt" APPEND_FILE="$AUTOGRADE_DIR/GRADING/APPEND.py" [[ -f "$STUDENTS_FILE" ]] || { echo "students.txt missing"; exit 1; } [[ -f "$APPEND_FILE" ]] || { echo "APPEND.py missing"; exit 1; } mapfile -t IDS < <( find "$AUTOGRADE_DIR" -mindepth 1 -maxdepth 1 -type d \ ! -name GRADING ! -name "__MACOSX" -printf '%f\n' | sort ) lookup_name() { local id="$1" awk -v id="$id" ' $1==id { last=$NF first="" for(i=2;i "$outfile" <> "$graded" set +e output="$(python3 "$graded" 2>&1)" set -e { echo echo "---- AUTOGRADE OUTPUT ----" echo "$output" echo "---- END AUTOGRADE OUTPUT ----" } >> "$outfile" score="$(echo "$output" | tail -n 1 | grep -Eo '[0-9]+[[:space:]]*/[[:space:]]*[0-9]+' || echo N/A)" sed -i.bak "s/STUDENT_SCORE/$score/" "$outfile" && rm "$outfile.bak" echo "Graded $id" done echo "Grading complete."