.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という2つの追加サブフォルダがあります。

私の最初の目標は、その親ディレクトリにある各クラスファイルのパスを抽出して170Gradingファイルに追加することです。次に、各.javaファイルを.classファイルにコンパイルしたいと思います。最後に、標準入力を使用してこれらの.classファイルを実行し、出力をテキストファイルに書き込もうとしています。

各ファイルを一度に1つずつ実行して、生徒が送信したコードを確認し、奇妙な選択肢や改善の余地がある部分を記録したいと思います。

現在のスクリプトは、すべての.javaファイルを正しく検索し、list.txtファイルに配置します。ライン:

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

また、うまく動作します。残念ながら、私のコードの最後の2行は私が望む効果がないので、修正する必要があるかもしれません。コードが正しくコンパイルされないため、最後の行でも何も出力されません。コードがコンパイルされると、パス/path/to/this/example.javaがexample.classになるため、コードの最後の行から2行目に "$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

おすすめ記事