diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
4条答案
按热度按时间piah890a1#
这取决于你的
diff
命令。我的(GNU diffutils 3.0)是这样的:0
的退出状态表示未找到差异,1
表示找到一些差异,2
表示有问题。通常,不同的二进制文件被视为有问题,但可以使用-a
或--text
选项,或者-q
或--brief
选项更改此状态。fdx2calv2#
根据您使用的diff版本的不同,可能会有,也可能没有不同的错误代码。如果我没记错的话,标准的BSD diff总是返回0、1或2的退出代码。
然而,手册页并没有列出diff可能做的所有事情,而是列出了可以用来使用diff命令的文档。在shell脚本中,我想知道文件是否匹配(exit = 0)。然而,在我的shell脚本中,我还想知道diff命令本身是否不起作用。
假设我被告知2意味着diff命令失败,但是diff命令的新版本区分了无法读取的文件(exit = 2)和丢失的文件(exit = 3),现在,假设我在diff命令的早期版本中执行了以下操作,但是
$file2
并不存在:在上面的代码中,我检查了错误代码2和1,但没有检查错误代码3。因此,我没有检测丢失的文件,而是假设文件匹配。
手册页试图确保将来对操作系统的升级不会导致大多数shell脚本突然失败,这就是为什么有一个单独的
awk
和nawk
命令以及一个单独的grep
和egrep
命令。oiopk7p53#
在我的例子中,
diff
返回127。搜索它并在tldp.org“具有特殊含义的退出代码”中找到它127“找不到命令”-非法命令-可能是$PATH或输入错误。
我使用了一个不正确的路径进行比较。:)
字体:Advanced Bash-Scripting Guide。
dgiusagp4#
macOS使用与GNU diff类似的返回代码,但明确定义了2作为错误情况的返回代码:
退出状态0表示未发现差异,1表示发现一些差异,2表示有问题。
--摘自
info diff
的“调用diff”一节,在macOS 12.6.3下