首页 > 解决方案 > 用于持续检查差异的 Bash 脚本

问题描述

我有 2 个 c++ 二进制文件和一个准备解释的 java 类文件。

debug_script.sh //my script file
gen
exe
prob.class

在 debug_script 中,我的第一个目标是执行gen. 这会将输出字符串打印到标准输出,让我们调用它EXPR。然后字符串进入exeprob.class读取由换行符分隔的标准输入。在伪代码/破碎 bash 中,这看起来像:

./exe < EXPR
java -cp . prob.class < EXPR

两者都exe生成prob.class一个整数标准输出,我想比较这两个整数,看看它们在无限循环中是否相等(重复整个生成过程EXPR并将其提供给两个程序)。

如果从和中返回的两个整数不同,则循环应该中断并存储EXPR在文件中,或者只是回显它。genprob.class

标签: bash

解决方案


您可以将输出存储在变量中并将其传递给您的其他程序,例如:

#!/bin/bash

while : ; do

    gen_out=$(gen)
    intone=$(./exe <<<"$gen_out")
    inttwo=$(java -cp . prob.class <<<"$gen_out")

    if [[ $intone != $inttwo ]]; then
        echo "gen output when exe and prob.class differ: $gen_out"
        echo "exe output: $intone"
        echo "prob.class output: $inttwo"
        break
    fi

done

<<<这里称为字符串。请参阅bash 手册


推荐阅读