Bash脚本输出与参考文件对比异常求助:内容一致却返回0
问题分析与解决
你的命令存在两个关键错误,导致明明内容一致却返回0:
错误点1:管道使用逻辑错误
result=$(./test.sh)| cmp -s $result test 里的管道是把赋值命令本身的输出传给cmp,但result=$(...)这种赋值操作不会向标准输出输出任何内容,所以cmp接收到的是空数据,自然和test文件对比失败。
错误点2:cmp参数用法错误
cmp -s $result test 中,cmp的第一个参数需要是文件名,而你把$result(test.sh的输出内容)当作文件名传入,cmp会尝试打开以该内容命名的文件,这显然不存在,必然对比失败。同时,用变量存储132KB的内容还会遇到分词、通配符替换的问题,破坏原内容的完整性。
正确的命令写法
直接将test.sh的输出通过管道传给cmp,用-表示从标准输入读取内容,和test文件对比:
./test.sh | cmp -s - test && echo 1 || echo 0
当test.sh的输出和test文件完全一致时,cmp返回0,触发&& echo 1;不一致则返回非0,触发|| echo 0。
内容的提问来源于stack exchange,提问作者Iceforest
相关产品推荐
相关产品推荐

