我正在编写一个测试脚本。它使用作为输入传递的 *.in 文件执行程序,并使用diff命令将其输出与 *.out 文件进行比较。
但是,我不想打印diff输出,而是检查是否有,如果有,则将 *.in 文件名添加到失败测试列表中。
问题是我不知道如何检查命令是否产生输出而不打印它。
我现在的脚本:
failed_tests=""
for filename in $directory/*.in; do
command=< ${filename} ./${program} | diff - ${filename%.in}.out
# Check if command produces output.
if command; then
# Add filename to failed tests list.
failed_tests="${failed_tests} ${filename}"
fi
done
echo $failed_tests
Run Code Online (Sandbox Code Playgroud)
预先感谢您的所有答案。
您的方法是可行的,但是您必须在 `` 或 中捕获 $command $(),另外, $filename 应该充当输入,但不重定向其内容。顺便说一句,您可能想要删除变量中的大括号,只要相邻字符不是分隔符,它就应该有效,例如 _
command=$(./$program $filename | diff - -q $filename%.in.out)
Run Code Online (Sandbox Code Playgroud)
-qdiff 中的选项表示仅在 .out 不同时报告。if不带方括号仅适用于具有退出状态的程序或命令。例如 grep
if [[ -n $command ]]; then
# Add filename to failed tests list.
failed_tests="$failed_tests $filename"
fi
Run Code Online (Sandbox Code Playgroud)
-n选项表示不为空
最后,在循环之外采用相同的方法:
if [[ -n $failed_tests ]]; then
#do something here
fi
Run Code Online (Sandbox Code Playgroud)