すべての入力ファイルをテストし、その数の出力ファイルを生成する実行可能ファイルがあります(この部分は私がすることができます)。次に、新しく作成されたファイル(mytestN.out)を正しい出力(testN.out)を持つファイルと比較し、それをdifftestN.txtというファイルにパイプします。次に、各difftest.txtをチェックし、空の場合は「成功」を印刷し、それ以外の場合は「差分検出」を印刷します。
例えば、私はします
./Executable < test1.in > mytest1.out
N test.inの場合。私はこれを使ってこれが可能であることを知りました。
for f in test*.in; do ./tetris <"$f" >"my${f%in}svg"; done
次に、すべてのmytest.outとすべてのtest.outに対してdiffコマンドを実行します。
diff mytest1.out test1.out > difftest1.txt
すべてのtestNに対してこれを行う方法がわかりません。私はこれが正しいアプローチだと思います。
for f in mytest*.svg; do diff "$f" "###what goes here?###" > "diff${f%in}txt"; done
しかし、「$ f」の後に何が起こるのかわからず、違いはdiffmytestN.txtに渡されますが、difftestN.txtが欲しいです。
その後、各difftest.txtをチェックし、空の場合は「成功」を印刷し、空でない場合は「差分発見」を印刷したいと思います。
答え1
記載されているファイルの数に関係なく、これを調整できます。以下は、私が使用した4つのテストファイルの内容です:test1:1 mytest1:1 test2:2 mytest2:2
for i in {1..2}; do
diff test${i}.out mytest${i}.out &>/dev/null
es=$?
if [ $es -ne 0 ]; then
echo "difference found"
else
echo "success"
fi
done
出力:
difference found
success
あなたはdiff出力ファイルを保存するように頼んだので、あなたの質問に文字通り答えなかったことを知っています。必ずこれを行う必要がある場合は、コードを変更できます。
diff test${i}.out mytest${i}.out > difftest${i}.txt
if ! [[ -s difftest${i} ]]; then
echo success
else
echo "difference found"
fi
プログラムが内容のあるファイルを存在しないファイルと比較しようとすると、ファイルと存在しないファイル文書の間にかなりの違いがあるように見えるstderr出力を生成することを覚えておくと便利です。 。 stdoutだけが*.txtに入るので大丈夫です。