내 현재 코드의 복사본은 다음과 같습니다.
#!/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