我正在尝试使用此脚本来检查程序(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"
。
答案 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
的输出。如果想要重定向stdout
和stderr
,则需要使用此命令:
./myprogram < input.txt &> actual.txt
如果你想忽略stderr
并将其扔进&#34;黑洞&#34;你会用:
./myprogram < input.txt 2> /dev/null > actual.txt