用于检查diff的Bash脚本

时间:2014-06-30 23:13:45

标签: linux macos bash shell

我正在尝试使用此脚本来检查程序(test21)的输出与已知的正确结果文本文件。我试过用几种方法来编写它,但我无法让它工作。任何想法,谢谢!

#!/bin/bash                                                                                                                                                                        

arr=$(find resultfile*)
x=0


for i in $(find resultfile*);do
arr[$x]=$i
x=$(($x + 1))
done

for i in ${arr[@]}; do
echo $i
done

x=0
for i in $(find testfile*);
do
    if diff  ${arr[$x]} <(./test21< testfile1.txt 2>&1); then
        echo Everything is correct
    else
        echo Everything is wrong
    fi
    x=$(($x+1))

done

为此,我说:

Segmentation fault: 11  ./test21 < "testfile1.txt" 2>&1

我的程序test21接收输入文本文件并对其进行解析,这可能导致分段错误。但如果我使用./test21 testfile1.txt我的程序运行完全正常。我在testfile1.txt中进行了硬编码,但它应该是

if diff  ${arr[$x]} <(./test21< $i 2>&1); then

但是,即使我$i,也会将其读为"$i"

2 个答案:

答案 0 :(得分:1)

  

我明白了:

Segmentation fault: 11  ./test21 < "testfile1.txt" 2>&1
     

我的程序test21接收输入文本文件并对其进行解析   可能导致分段错误。但如果我使用./test21 testfile1.txt我的程序运行得很好。

然后就这样使用;而不是

./test21< testfile1.txt 2>&1

./test21 testfile1.txt 2>&1

答案 1 :(得分:0)

假设您要运行程序myprogram,该程序将使用input.txt文件作为输入。 您希望将程序的输出与correct.txt文件中写入的已知正确结果进行比较。我们将在actual.txt文件中保存您的程序输出。

#!/bin/bash
./myprogram < input.txt > actual.txt
cmp -s actual.txt correct.txt
if [ $? -eq 1 ]; then
    echo "WRONG"
else
   echo "CORRECT"
fi

请注意,actual.txt将仅捕获来自stdout的输出。如果想要重定向stdoutstderr,则需要使用此命令:

./myprogram < input.txt &> actual.txt

如果你想忽略stderr并将其扔进&#34;黑洞&#34;你会用:

./myprogram < input.txt 2> /dev/null > actual.txt