.java 파일 찾기, 컴파일 및 실행 프로세스를 자동화하기 위한 TA bash 스크립트 [닫기]

.java 파일 찾기, 컴파일 및 실행 프로세스를 자동화하기 위한 TA bash 스크립트 [닫기]

내 현재 코드의 복사본은 다음과 같습니다.

#!/bin/bash
list="/Users/ajm/Desktop/170Grading/output/list.txt"
score="/Users/ajm/Desktop/170Grading/output/score.txt"
echo "" > list
echo "" > score
find $1 -name '*.java'>> list
exec 3<list
while IFS='' read -r -u 3 line || [[ -n "$line" ]];
    do
    # read -p "> $line (Press Enter to continue)"
    echo "the next file is $line" >> score 
    # open -a "Xcode" "$line" 
    ((javac -d "/Users/ajm/Desktop/170Grading/runs" "$line")  && (echo compiled >> score)) || ((echo not compiled) >> score) 
    echo "" | cd "/Users/ajm/Desktop/170Grading/runs" java "$line" >> score
done 

학생들이 채점을 위해 파일을 제출하면 강좌 웹사이트에서 .zip 파일을 다운로드합니다. 이 파일을 데스크탑의 상위 폴더인 170Grading.

170Grading상위 폴더 내에는 Output 및 Run이라는 두 개의 추가 하위 폴더가 있습니다.

나의 첫 번째 목표는 해당 상위 디렉터리에 있는 각 클래스 파일의 경로를 추출하여 170Grading파일에 추가하는 것입니다. 그런 다음 각 .java 파일을 .class 파일로 컴파일하고 싶습니다. 마지막으로 표준 입력을 사용하여 이러한 .class 파일을 실행하고 출력을 텍스트 파일에 기록하려고 합니다.

각 파일을 한 번에 하나씩 실행하여 학생들이 제출한 코드를 검토하고 이상한 선택 사항이나 개선의 여지가 있는 부분을 기록하고 싶습니다.

현재 스크립트는 모든 .java 파일을 올바르게 찾아서 list.txt 파일에 배치합니다. 선:

# read -p "> $line (Press Enter to continue)"
echo "the next file is $line" >> score 
# open -a "Xcode" "$line"  

또한 잘 작동합니다. 안타깝게도 내 코드의 마지막 두 줄에는 내가 원하는 효과가 없으므로 수정해야 할 수도 있습니다. 코드가 올바르게 컴파일되지 않으므로 마지막 줄에서도 아무것도 출력되지 않습니다. 코드가 컴파일될 때 경로 /path/to/this/example.java가 example.class가 되기 때문에 코드의 마지막 줄에서 두 번째 줄에 "$line"을 사용할 수 없다는 것을 깨달았습니다.

답변1

제가 검토하기에는 스크립트에 오류가 너무 많았습니다.

불행하게도 더 많은 실수를 할 여지가 생길 수도 있습니다.

더 보자예 아니오처럼코드는 문제를 해결하는 데 도움이 될 수 있습니다.

#!/bin/bash

list='/Users/ajm/Desktop/170Grading/output/list.txt'
score='/Users/ajm/Desktop/170Grading/output/score.txt'

echo "" > "$list"
echo "" > "$score"

find "$1" -name '*.java' >> "$list"

exec 3< "$list"

while IFS='' read -r -u 3 line || [ -n "$line" ]
do

    read -p "> $line (Press Enter to continue)"

    echo "the next file is $line" >> "$score"

    open -a "Xcode" "$line" 

    javac -d "/Users/ajm/Desktop/170Grading/runs" "$line" && echo compiled >> "$score" || echo not compiled >> "$score"

    echo cd "/Users/ajm/Desktop/170Grading/runs" java "$line" >> "$score"

done

관련 정보