cmp命令的返回值?

cmp命令的返回值?

我在 Ubuntu 上使用该cmp命令,我想对其返回值进行一些说明。

手册 ( $ man cmp) 没有提及返回值,但建议查看 GNU 文档。确实如此,$ info cmp说:

退出状态 0 表示未发现差异,1 表示发现一些差异,2 表示有问题。

(可以被找寻到在线这里,同一句话)。

我理解 0 和 1 值,但在什么情况下会cmp返回值 2?这还不清楚。

cmp上下文:我正在使用该命令来检查两个文件是否相同,我想知道如果返回 2我应该做什么。

版本:

$ cmp --version
cmp (GNU diffutils) 3.7

答案1

当出现阻止 GNU 执行比较的错误时, GNUcmp以退出状态 2 终止,例如,如果找不到或无法读取一个或两个文件:

$ cmp asntohe asoneth
cmp: asntohe: No such file or directory
$ echo "$?"
2

POSIX 标准规范cmp表示该实用程序应在“错误”时以“大于 1”的退出状态终止。

答案2

退出状态为 2 意味着cmp无法执行比较,例如因为它无法读取一个或两个文件。如果其中一个文件名指向目录,或者文件不存在,或者您没有读取它们的权限等,则可能会发生这种情况。

这并不详尽;cmp如果没有足够的内存来执行比较,也可能会失败。

答案3

cmp如果您在无效的命令行中给出它,也会以状态 2 退出;例如,未定义的选项(如-z--foo)或两个以上的文件名(或  文件名)。无论如何,它应该给您一条描述问题的错误消息。

答案4

cmps 退出状态为 2,表示“不可恢复的错误,我放弃”。它涵盖了cmp除“相同”或“不同”之外的所有退出状态。

按照 Unix 的“做好一件事”的传统,cmp比较两个文件。它不是通用诊断工具。

在 Unix 的早期,二进制cmp文件较小是有利的。避免“特征蠕变”有助于小型化。

相关内容