这是我当前代码的副本:
#!/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
父文件夹中,还有两个附加子文件夹,这些子文件夹称为输出和运行。
我的第一个目标是提取该父目录中每个类文件的路径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"
也能正常工作。不幸的是,我的代码的最后两行未能达到我想要的效果,可能需要修改。该代码无法正确编译,因此最后一行也无法输出任何内容。我认识到我不能在代码的第二行到最后一行中使用“$line”,因为编译代码时路径 /path/to/this/example.java 变成了 example.class。
答案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