私の現在のコードのコピーは次のとおりです。
#!/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