我有一个bash脚本,针对文件夹中的一堆测试文件运行可执行文件。有些测试文件应该通过,有些应该失败。我要做的是列出应该失败的文件列表,然后将文件夹中的其余测试视为肯定测试。然后,我可以分别遍历每个列表并相应地处理结果。
这就是我所拥有的,当只有1个失败测试但无法进行更多测试时,它可以工作:
negative_tests() {
echo "../testcases/test3.txt"
echo "../testcases/test4.txt"
}
negative_tests=$(negative_tests)
positive_tests=$(comm -23 <(ls ../testcases/*) <(negative_tests))
log "Running tests.."
for testfile in $positive_tests; do
./a.out $testfile >> output.txt || { echo "Failed on $testfile." ; exit 1; }
done
for testfile in $negative_tests; do
./a.out $testfile >> output.txt && { echo "Succeeded on $testfile succeeded when failure was expected."; exit 1; }
done
我感觉到我只是缺少bash数据模型的工作原理。有什么想法或更好的方法吗?
答案 0 :(得分:0)
看起来这种方法可行,但是comm
的工作方式是,它希望所比较的行是有序的。因此,我需要将否定情况用管道传输到sort
中,以便它们与ls
中的文件顺序匹配:
positive_tests=$(comm -23 <(ls ../testcases/*) <(negative_tests | sort))
然后,一切正常。尽管我对看到人们可能有的其他解决方案很感兴趣。