私はbashの使用にかなり慣れておらず、いくつかのテストケースを実行するためのオートグレーダースクリプトを作成しようとしていました。現在、私のbashスクリプトは奇妙に動作しているようです。-eフラグを設定すると、diffのサイズが正の場合にbashが終了し、-eフラグが設定されていない場合、スクリプトはdiffファイルの違いを無視し、すべてのテストに合格したことを示します。
「write_diff_out=....」コマンドの直後にスクリプトが終了し、次の行は出力されません。他のすべてが正常に実行されるため、スクリプトの差分部分のみを含めました(ファイルもすべて存在します)。
# Validate outputs and print results
echo "> Comparing current build's final memory output with golden memory output...";
for file in `ls test_progs`;
do
file=$(echo $file | cut -d '.' -f1);
echo "$file";
write_diff_out=$(diff ./log/$file.writeback.out ./log/$file.writeback.gold.out > ./diff/$file.writeback.diff);
echo "Finished write_diff";
program_diff_out=$(diff -u <(grep -E '@@@' ./log/$file.program.out) <(grep -E '@@@' ./log/$file.program.gold.out) > ./diff/$file.program.diff);
echo "Finished program diff";
if [ -z "$write_diff_out" ] && [ -z "$program_diff_out" ]; then
printf "%20s:\e[0;32mPASSED\e[0m\n" "$file";
else
printf "%20s:\e[0;31mFAILED\e[0m\n" "$file";
fi
done
echo "> Done comparing test outputs.";
diffコマンドをフォーマットするより良い方法も自由に提案してください。私はそれらを書くためのさまざまな方法があることを知っています。