我有三个C ++ 11程序,A.cpp(写入输入文件),B.cpp和C.cpp(都写入stdout)。有没有办法编译+运行A.cpp,然后运行B.cpp和C.cpp并比较B和C的输出,如果它们不同则会中断,如果它们是'然后重新开始运行A,B和C等(循环达1000次)?
我在Windows 10上,所以最好我想要一个Python或bash脚本,但是bash在Windows中很痛苦(虽然我使用Gow,这为cmd添加了一些功能。我不喜欢#39; t有cygwin。)。
编辑:交换不同和相同,现在已经修复。对不起。
答案 0 :(得分:1)
你可以这样做:
#!/bin/bash
pathA=/path/to/A.cpp
pathB=/path/to/B.cpp
pathC=/path/to/C.cpp
execA=/path/to/A.exe
execB=/path/to/B.exe
execC=/path/to/C.exe
for i in {1..1000}; do
g++ -O2 -std=c++11 "$pathA" -o "$execA" && "$execA" # Compile and run A
g++ -O2 -std=c++11 "$pathB" -o "$execB" # Compile B
g++ -O2 -std=c++11 "$pathC" -o "$execC" # Compile C
if ! diff -q <("$execB") <("$execC"); then # The output is different
echo "In run number $i, the output was different"
break
fi
done
循环1000次,编译并执行A,然后编译B和C并比较它们的输出。如果它是相同的,我们离开循环。
<(commands)
语法为process substitution:它基本上允许您将括号中的命令视为文件(命名管道)。