什么是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脚本突然失败。 这就是为什么有一个单独的awk
和nawk
命令以及单独的grep
和egrep
命令。
*根据@chus的评论更新。
在我的情况下差异返回127,search它,并find它在tldp.org“退出特殊含义代码”
127找不到命令“illegal_command $ PATH或错字可能出现问题。
我用了一个不正确的path来比较。 🙂
字体:tldp.org/LDP/abs/html/exitcodes.html