我目前正在运行一个网络设备和一个网络设备的模拟,并在两者上运行一些命令来比较我的模拟设备的行为与原始设备的接近程度。
我有一个脚本,运行如下:diff -q /tmp/offline_output /tmp/online_output 1>/dev/null
if [[ $? == "0" ]]; then
echo "PASSED: $cmd"
#cat /tmp/online_output
#cat /tmp/offline_output
else
echo "FAILED: $cmd"
echo "---------------------------------" >> failure_log
echo "FAILURE: $cmd " >> failure_log
diff -c /tmp/offline_output /tmp/online_output >> failure_log
echo "" >> failure_log
echo "" >> failure_log
fi
以确定命令中的变化。然而,我发现这在非常长的文本行(单个整数略有不同)中可能非常微妙。
。
! cookie=0x3abb8bc, table=18, priority=129,ipv6,reg14=0x6,metadata=0x1,ipv6_dst=fe80::/64 actions=dec_ttl(),load:0->OXM_OF_PKT_REG4[32..47],move:NXM_NX_IPV6_DST[]->NXM_NX_XXREG0[],load:0x8580afffef40201->NXM_NX_XXREG1[0..63],load:0xfe80000000000000->NXM_NX_XXREG1[64..127],mod_dl_src:0a:58:0a:f4:02:01,load:0x6->NXM_NX_REG15[],load:0x1->NXM_NX_REG10[0],resubmit(,19)
...
! cookie=0x3abb8bc, table=18, priority=129,ipv6,reg14=0x6,metadata=0x1,ipv6_dst=fe80::/64 actions=dec_ttl,load:0->OXM_OF_PKT_REG4[32..47],move:NXM_NX_IPV6_DST[]->NXM_NX_XXREG0[],load:0x8580afffef40201->NXM_NX_XXREG1[0..63],load:0xfe80000000000000->NXM_NX_XXREG1[64..127],mod_dl_src:0a:58:0a:f4:02:01,load:0x6->NXM_NX_REG15[],load:0x1->NXM_NX_REG10[0],resubmit(,19)
在长块的日志中找出这些细微的差异是具有挑战性的。
有更好的方法吗?我觉得肯定有。我用diff试过不同的选项,但没有一个真正脱颖而出,成为一个很好的解决方案。
谢谢!
如果您安装了git
,您可以使用它来显示颜色差异(即使有问题的文件没有被git
跟踪):
if cmp /tmp/offline_output /tmp/online_output; then
echo "PASSED: $cmd"
else
echo "FAILED: $cmd"
( echo "---------------------------------"
echo "FAILURE: $cmd "
git diff --no-index --color=always --word-diff=color --word-diff-regex='[^,]+' /tmp/offline_output /tmp/online_output
) >> failure_log
fi
然后,您必须以呈现ANSI终端颜色代码的方式查看文件,以便轻松查看更改。
还要注意使用cmp
进行初始测试,以查看文件是否不同,并将其直接用作if
测试用例,而不是查看$?
,以及我如何将重定向更改为failure_log
以使所有相关命令输出到它,而无需重定向每个单独的命令。