如何解决如何忽略bash中diff的输出
我试图比较两个文件并输出自定义字符串。以下是我的脚本。
#!/bin/bash
./${1} > tmp
if ! diff -q tmp ans.txt &>/dev/null; then
>&2 echo "different"
else
>&2 echo "same"
fi
执行脚本时,我得到:
sh cmp.sh ans.txt
different
Files tmp and ans.txt differ
奇怪的是,当我键入diff -q tmp ans.txt &>/dev/null
时。没有输出。
如何解决(我不希望行:“文件tmp和ans.txt不同”)吗?谢谢!
解决方法
您使用的sh
的版本很可能无法理解同时重定向stdout和stderr的bash(deprecated/obsolete)扩展名&>
。在posix shell中,我认为command &>/dev/null
被解析为{ command & }; > /dev/null
-它导致在后台&
中运行命令,而我认为> /dev/null
部分被忽略,因为它只是重定向不存在的命令的输出-这是有效的语法,但不执行任何操作。因为在后台运行命令成功,所以if
总是成功。
建议不要使用&>
-改为使用>/dev/null 2>&1
。使用diff
漂亮地打印文件比较。在批处理脚本中使用cmp
来比较文件。
if cmp -s tmp ans.txt; then
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。