用于检查两个c ++文件是否具有等效标准输出的脚本

时间:2015-12-23 18:43:44

标签: bash shell c++11

我有三个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。)。

编辑:交换不同和相同,现在已经修复。对不起。

1 个答案:

答案 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:它基本上允许您将括号中的命令视为文件(命名管道)。