如何忽略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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...