什么是diff的错误退出值?

diff手册页上,我发现这些退出值:

  0 No differences were found. 1 Differences were found. >1 An error occurred. 

对于不同的错误,是否有超过1的不同退出值?

这取决于你的diff命令。 我的(GNU diffutils 3.0)说:

退出状态0意味着没有发现差异, 1意味着一些差异被发现,而2意味着麻烦。 通常情况下,不同的二进制文件算作麻烦,但可以通过使用-a--text选项或-q--brief选项来更改。

有可能,或者可能不会有不同的错误代码,取决于您使用的差异版本。 如果我没有记错,标准的BSD diff总是返回一个0,1或2的退出码。

但是,联机帮助页并没有绘制差异可能会做的所有事情,而是可以用于使用diff命令的文档。 在shell脚本中,我想知道文件是否匹配(exit = 0)或不匹配(exit = 1)。 但是,在我的shell脚本中,我也想知道diff命令本身不起作用。

 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 ] echo "$file1 and $file2 differ" else echo "There was something wrong with the diff command" fi 

想象一下,如果我被告知2意味着diff命令失败,但diff命令的一个较新版本区分了你不能读取的文件(exit = 2)和缺less的文件(exit = 3)。 现在,想象一下如果我在diff命令的早期版本中执行以下操作,但是$file2不存在:

 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 ] echo "$file1 and $file2 differ" else echo "$file1 and $file2 are the same file" fi 

在上面的代码中,我检查了2和1的错误代码,但不是3.所以,而不是检测丢失的文件,我假设文件匹配。

联机帮助页正在尝试确保将来升级到操作系统不会导致大部分shell脚本突然失败。 这就是为什么有一个单独的awknawk命令以及单独的grepegrep命令。

*根据@chus的评论更新。

在我的情况下差异返回127,search它,并find它在tldp.org“退出特殊含义代码”

127找不到命令“illegal_command $ PATH或错字可能出现问题。

我用了一个不正确的path来比较。 🙂

字体:tldp.org/LDP/abs/html/exitcodes.html