助教 bash 脚本用于自动查找、编译和运行 .java 文件的过程

助教 bash 脚本用于自动查找、编译和运行 .java 文件的过程

这是我当前代码的副本:

#!/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

相关内容